php图片编辑失真,PHP处理图片固定大小 不失真 不变形

由于工中使用到此代码  借鉴了各位前辈们代码的基础上修改而来 如果您的项目中有需要此代码 要以尽情的复制和修改 ;如果您有更好的代码烦请告知本人 。

我将感激不尽

下面由上代码

//图像处理类

class Image {

private $file;//图片地址

private $width;//图片长度

private $height;//图片长度

private $type;//图片类型

private $img;//原图的资源句柄

private $new;//新图的资源句柄

//构造方法,初始化

public function __construct($_file) {

$this->file = $_SERVER["DOCUMENT_ROOT"].$_file;

list($this->width, $this->height, $this->type) = getimagesize($this->file);

$this->img = $this->getFromImg($this->file, $this->type);

}

//cke专用图像处理

public function ckeImg($new_width = 0,$new_height = 0) {

list($_water_width,$_water_height,$_water_type) = getimagesize(MARK);

$_water = $this->getFromImg(MARK,$_water_type);

if (empty($new_width) && empty($new_height)) {

$new_width = $this->width;

$new_height = $this->height;

}

if (!is_numeric($new_width) || !is_numeric($new_height)) {

$new_width = $this->width;

$new_height = $this->height;

}

if ($this->width > $new_width) { //通过指定长度,获取等比例的高度

$new_height = ($new_width / $this->width) * $this->height;

} else {

$new_width = $this->width;

$new_height = $this->height;

}

if ($this->height > $new_height) { //通过指定高度,获取等比例长度

$new_width = ($new_height / $this->height) * $this->width;

} else {

$new_width = $this->width;

$new_height = $this->height;

}

$_water_x = $new_width - $_water_width - 5;

$_water_y = $new_height - $_water_height - 5;

$this->new = imagecreatetruecolor($new_width,$new_height);

imagecopyresampled($this->new,$this->img,0,0,0,0,$new_width,$new_height,$this->width,$this->height);

if ($new_width > $_water_width && $new_height > $_water_height) {

imagecopy($this->new,$_water,$_water_x,$_water_y,0,0,$_water_width,$_water_height);

}

imagedestroy($_water);

}

//缩略图(固定长高容器,图像等比例,扩容填充,裁剪)[固定了大小,不失真,不变形]

public function thumb($new_width = 0,$new_height = 0) {

if (empty($new_width) && empty($new_height)) {

$new_width = $this->width;

$new_height = $this->height;

}

if (!is_numeric($new_width) || !is_numeric($new_height)) {

$new_width = $this->width;

$new_height = $this->height;

}

//创建一个容器

$_n_w = $new_width;

$_n_h = $new_height;

//创建裁剪点

$_cut_width = 0;

$_cut_height = 0;

if ($this->width < $this->height) {

$new_width = ($new_height / $this->height) * $this->width;

} else {

$new_height = ($new_width / $this->width) * $this->height;

}

if ($new_width < $_n_w) { //如果新高度小于新容器高度

$r = $_n_w / $new_width; //按长度求出等比例因子

$new_width *= $r; //扩展填充后的长度

$new_height *= $r; //扩展填充后的高度

$_cut_height = ($new_height - $_n_h) / 2; //求出裁剪点的高度

}

if ($new_height < $_n_h) { //如果新高度小于容器高度

$r = $_n_h / $new_height; //按高度求出等比例因子

$new_width *= $r; //扩展填充后的长度

$new_height *= $r; //扩展填充后的高度

$_cut_width = ($new_width - $_n_w) / 2; //求出裁剪点的长度

}

$this->new = imagecreatetruecolor($_n_w,$_n_h);

imagecopyresampled($this->new,$this->img,0,0,$_cut_width,$_cut_height,$new_width,$new_height,$this->width,$this->height);

}

//加载图片,各种类型,返回图片的资源句柄

private function getFromImg($_file, $_type) {

switch ($_type) {

case 1 :

$img = imagecreatefromgif($_file);

break;

case 2 :

$img = imagecreatefromjpeg($_file);

break;

case 3 :

$img = imagecreatefrompng($_file);

break;

default:

Tool::alertBack('警告:此图片类型本系统不支持!');

}

return $img;

}

//图像输出

public function out() {

imagepng($this->new,$this->file);

imagedestroy($this->img);

imagedestroy($this->new);

}

}

?>

CK专用是专门处理CK编辑器所传图片  如有不需要的同学请删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

abiword Namespace List

abiword Namespace List Here is a list of all namespaces with brief descriptions: abicollab 这个命名空间以及下面的abicollab::service均是在线协作相关。abicollab::service 这个命名空间是在线协作相关。AiksaurusImpl 词库相关&#xff0c;命名空间名字翻译&#xff1…

ios php 表单提交图片上传,axios发送post请求提交图片表单步骤详解

这次给大家带来axios发送post请求提交图片表单步骤详解&#xff0c;axios发送post请求提交图片表单的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。DOME接口const userUploadAtt (File,config) > axios.post("接口",File,config)处理数…

solr4.6本地数据提交异常

初次学习solr的时候不能把dist文件夹所有的包都导入工程中&#xff0c;这样会有slf4j异常&#xff0c;这是因为slf4j版本冲突导致的。一个一个jar的导入的话&#xff0c;中间还是有许多异常出在哪个jar包中不清楚&#xff0c;所以我把我遇到的异常整理了一下。 异常一&#xff…

php 文件内容对比,php 比较两个文件是否相同

-### php比较两个文件是否相同小一点的文件直接实用内置函数就可以了function md5_files($filename,$filename1){$file1 md5_file($filename);$file md5_file($filename1);if($file $file1){return "文件相同";}else{return "文件不同";}}md5_file()…

今日心得:给自己写信

1.tomorrow is another day 2.有一种人一认识就觉得温馨 3.这个世界只在乎你是否达到了一定的高度&#xff0c;不在乎你是站在巨人的肩膀还是垃圾上上去的 4.花儿总要在风雨的洗礼下盛开 5.有一种“无能为力”叫宿命 6.幸福是什么&#xff1f;有很多幸福的瞬间&#xff0c;幸福…

Hibernate READ_WRITE CacheConcurrencyStrategy如何工作

介绍 在我以前的文章中&#xff0c;我介绍了NONSTRICT_READ_WRITE二级缓存并发机制。 在本文中&#xff0c;我将使用READ_WRITE策略继续本主题。 直写式缓存 NONSTRICT_READ_WRITE是一种通读缓存策略&#xff0c;可更新最终无效的缓存条目。 尽管这种策略可能很简单&#xff0…

matlab中的控制语句,MATLAB控制语句

目的&#xff1a;研究控制结构(用于, 是否, 切换, 中断, 继续, 输入/输出功能, 读取和存储数据)。If&#xff1a;If评估逻辑表达式并根据表达式的值执行一组语句。If语句的语法if expression 1statement1elseif expression 2statement 2elsestatement 3end例子>> a7a 7&g…

java.logging的重定向?

java.logging的重定向&#xff1f; 接着昨天的工作。 上面说要重定向java.util.logging.Logger的输出&#xff0c; 发现也不是不可能。 package jmx;import java.util.logging.FileHandler; import java.util.logging.Filter; import java.util.logging.Handler; import java.u…

Spring Enable批注–编写自定义的Enable批注

Spring提供了一系列名称以Enable *开头的注释&#xff0c;这些注释本质上使某些Spring管理的功能可以被激活。 这样的注释的一个很好的例子是EnableWebMvc &#xff0c;它引入了在基于Spring的应用程序中支持MVC流所需的所有bean。 另一个很好的例子是EnableAsync注释&#xff…

java hashmap替换key,HashMap 用可变对象作为 key 踩坑

点击上方☝Java编程技术乐园&#xff0c;轻松关注&#xff01;及时获取有趣有料的技术文章做一个积极的人编码、改bug、提升自己我有一个乐园&#xff0c;面向编程&#xff0c;春暖花开&#xff01;作者&#xff1a;Icharlehttps://icharle.com/hashmapkebianobj.html前言在 Ja…

(转)Eclipse平台技术概述

转载&#xff1a;周金根 http://zhoujg.blog.51cto.com/1281471/516833Eclipse&#xff1a;Eclipse平台技术概述2010-10-19 13:35:00标签&#xff1a;Eclipse 休闲 职场原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明…

php post调用api,PHP(CURL)POST数据调用API简单示例

/***一个完整的POST调用API的过程 百度知道*author: bo.xiao*/$url ‘http://zhidao.chanjet.com/restserver/zhidao’;$data array(‘api_key’>’3qQ2Edm62Vd4bAVCwNoxgn0l’,‘method’>’baidu.zhidao.getQuestionList’,‘call_id’>’1308713190’,‘cid’>…

【重温经典算法之二】快速排序

快速排序的思想与归并排序思想类似&#xff0c;都是采用分治法的思想。将一个数组A[l...r]使用快速排序可以分解为三个主要的步骤&#xff1a; 通过随机算法获得数组A中的一个下标k&#xff0c;将A[k]与A[r]交换。将数组分解成左右两个数组&#xff0c;左边数组的值均小于A[r]&…

用随机数发生器射击自己的脚

这将不是说明随机数生成器毕竟不是那么随机的文章之一。 因此&#xff0c;您中的那些人希望获得有关如何破解老虎机&#xff0c;继续前进的指南&#xff0c;在这里什么也看不到。 相反&#xff0c;它是有关一个不太常见的锁争用问题的帖子&#xff0c;该问题隐藏在Java API的随…

谈谈你对php的收获和不足,我的收获与不足

在我们的生活中&#xff0c;会经历很多不同的事情。有些是如流水般奔流向海&#xff1b;有些是如云烟一般消散&#xff1b;有些是能够像年轮般随时间流逝&#xff0c;一圈一圈留在那里&#xff0c;却始终浮现在于脑海&#xff0c;因为她曾经一次一次叮呤着你--“知不足才能自强…

cocos2dx

http://blog.csdn.net/iamlazybone/article/details/19046377 转载于:https://www.cnblogs.com/sgdkg/p/3548017.html

带有光纤的可扩展,健壮和标准的Java Web服务

这篇博客文章讨论了负载下的基准Web服务性能。 要了解有关Web服务性能理论的更多信息&#xff0c;请阅读利特尔定律&#xff0c;可伸缩性和容错 。 使用阻塞和异步IO对Web服务进行基准测试 Web应用程序&#xff08;或Web服务&#xff09;如何在负载下&#xff0c;面对各种故障…

转document.documentElement和document.body的区别

网页中获取滚动条卷去部分的高度&#xff0c;可以通过 document.body.scrollTop 来获取&#xff0c;比如使div跟着滚动条滚动&#xff1a; 转至:http://www.cnblogs.com/ckmouse/archive/2012/01/30/2332070.html <div id"div" style"width:100px;height:100…

php js 图片旋转,jQuery实现可以控制图片旋转角度效果

本文实例讲述了jQuery实现可以控制图片旋转角度效果。分享给大家供大家参考&#xff0c;具体如下&#xff1a;运行效果截图如下&#xff1a;具体代码如下&#xff1a;/p>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">img { margin-top:100px; m…

【ARDUINO】HC-05蓝牙不配对问题

除了刷主从之外&#xff0c;不配对的原因有1&#xff1a;已经配对其他设备&#xff0c;需用ATRMAAD来移除。2、默认为蓝牙由绑定指令设置&#xff0c;需改为任意地址连接模式ATCMODE1 //#define AT 2 #define LED 12 void setup() {pinMode(LED,OUTPUT);//pinMode(AT,OUTPUT);S…