class ImageCut {

public $path = '';

public $key = '';

public function __construct() {

}

public function set_image($path) {

$this->path = $path;

}

public function header_image(){

header('Content-type:image/jpeg');

}

public function header_304(){

//304缓存

$this->key = $etag = md5_file($this->path);

$last_mod = filemtime($this->path);

header('ETag:'.$etag);

header('Last-Modified:'.gmdate('D, d M Y H:i:s', $last_mod) . ' GMT');

if ((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $last_mod)

|| (isset($_SERVER['HTTP_IF_UNMODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_UNMODIFIED_SINCE']) < $last_mod)

|| (isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag)) {

header("HTTP/1.1 304 Not Modified");

return true;

} else {

return false;

}

}

public function get_data($width,$height){

if($this->path) {

$path = $this->path;

} else {

trigger_error('unset path');

}

if(!file_exists($path)) {

trigger_error('file not exist');

}

$img_type = exif_imagetype($path);

$old_size = getimagesize($path);

$old_width = $old_size[0];

$old_height = $old_size[1];

if($width==0 && $height==0) {

$width = $old_width;

$height = $old_height;

} else if($width==0) {

if($height>$old_height) {

$height = $old_height;

}

$width = $height/$old_height * $old_width;

} else if($height==0) {

if($width>$old_width) {

$width = $old_width;

}

$height = $width/$old_width * $old_height;

}

$dst_wh = $width/$height;

if($old_height>($old_width/$dst_wh)) {

$src_width = $old_width;

$src_height = $old_width/$dst_wh;

$src_x = 0;

$src_y = ($old_height-$src_height)/2;

} else {

$src_height = $old_height;

$src_width = $old_height*$dst_wh;

$src_y = 0;

$src_x = ($old_width-$src_width)/2;

}

switch($img_type) {

case IMAGETYPE_JPEG:

$img = imagecreatefromjpeg($path);

break;

case IMAGETYPE_PNG:

$img = imagecreatefrompng($path);

break;

case IMAGETYPE_GIF:

$img = imagecreatefromgif($path);

break;

}

if($src_width

$width = $src_width;

}

if($src_height

$height = $src_height;

}

//重新画

$newimage = imagecreatetruecolor($width,$height);

imagecopyresampled($newimage,$img,0,0,$src_x,$src_y,$width,$height,$src_width,$src_height);

//开始缓存图片

ob_start();

imagejpeg($newimage,false,90);

$data = ob_get_contents();

ob_end_clean();

imagedestroy($img);

imagedestroy($newimage);

return $data;

}

public function show($width,$height){

$this->header_image();

$if_304 = $this->header_304();

if($if_304) {

return;

}

echo $this->get_data($width, $height);

}

}

$cut = new ImageCut();

$cut->set_image('1.jpg');//path可以通过参数传过来

$cut->show(200,200);//随意设置宽高,可以通过参数传过来,

?>

php图片自动裁剪工具,php图片自动裁剪工具,解决图片变形问题,缩略图问题相关推荐

  1. 图片放大神器【waifu2x】瞬间解决图片模糊

    遇见好看的图片又觉得不够清晰?扔掉又觉得可惜,非常适合当桌面壁纸舰娘图,奈何分辨率太低,到处找老司机求"原图",搜谷歌搜P站最后却发现作者只放了低分图,最后不得不放弃使用的情况吧, ...

  2. html图片左侧留白,HTML+CSS入门 如何解决图片跨域导致的截图空白

    本篇教程介绍了HTML+CSS入门 如何解决图片跨域导致的截图空白,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < 1. 后端支持:图片要是cdn上的地址,并且允许图片跨域 ...

  3. android图片布局填冲满,Android图片裁剪库——cropper使用,完美解决图片填充不满布局问题...

    前些时间请了一个月假,远程办公,期间项目主要做图片裁剪,脑子里第一反应就是github上开源裁剪库,试了排名的前几个,其中不是UI定制度太低就是裁剪效果不怎么样.当然你也可以直接intent一下系统的 ...

  4. Vue —— 解决图片缓存问题

    图片更改后,但是还是显示的是之前的图片,这就是因为之前的图片被缓存了下来,为了解决图片缓存,需要在图片路径后面加上时间戳 <img :src="`${imgurl}?${Date.no ...

  5. 响铃:百度图腾要做正版授权平台,它能解决图片版权双向痛点吗?

    文|曾响铃 来源|科技向令说(xiangling0815) 继数字音乐.游戏.影视等版权问题后,图片版权问题近来成为版权领域的热门,与版权问题天然亲近的区块链免不了掺和一下,7月,百度就推出了基于区块 ...

  6. javascript焦点图(根据图片下方的小框自动播放)

    html和css就不详细说明了,也是简单布局,通过定位把跟随图片的小框,定位到图片下方 1 <!DOCTYPE html> 2 <html> 3 4 <head> ...

  7. android生成大分辨率图片,自动生成Android不同分辨率下的图片

    转自: http://blog..net/offbye/article/details/50012605 Android屏幕分辨率适配的图标处理比较麻烦,让UI做不同尺寸的图片也挺浪费时间的,并且容易 ...

  8. Dataset之图片数据增强:设计自动生成汽车车牌图片算法(cv2+PIL)根据随机指定七个字符生成逼真车牌图片数据集(自然场景下+各种噪声效果)可视化

    Dataset之图片数据增强:设计自动生成汽车车牌图片算法(cv2+PIL)根据随机指定七个字符生成逼真车牌图片数据集(自然场景下+各种噪声效果)可视化 导读 设计自动生成汽车车牌图片算法,基于cv2 ...

  9. 浮动层图片鼠标指针移到自动放大

    html code:  1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...

  10. html 网页背景图片根据屏幕大小CSS自动缩放

    腾讯微博和QQ空间的登录背景图片是根据访客的屏幕大小自动缩放的,但是好像是用JQuery代码实现的.先不说要调用jq库拖慢了网页的打开时间,而且对于兼用性不好. 前几天用CSS研究出相同效果的样式代码 ...

最新文章

  1. AI一分钟 | 特斯拉再融46亿;腾讯AI Lab宣布开源多标签图像数据集
  2. JavaScript里面三个等号和两个等号的区别
  3. 设置TabBar分栏控制器上图片的大小问题
  4. 一网打尽深度学习之卷积神经网络的经典网络(LeNet-5、AlexNet、ZFNet、VGG-16、GoogLeNet、ResNet)
  5. CodeArt WSS3.0(MOSS)字段编辑权限控制解决方案(v1.0)
  6. python自定义全局异常_flask中主动抛出异常及统一异常处理代码示例
  7. 介绍一个国外的分类网站Egouz
  8. VS2012生成C的dll并调用以及Python调用C的DLL
  9. 排名前100的PHP函数及分析
  10. 周期(KMP算法之Next数组的性质)
  11. 巧设IP路由 实现不同网段互通
  12. PHP底层的运行机制与原理
  13. CSDN博文分类全部删除了?
  14. 基于Python构建土地利用转移矩阵及完成Markov预测
  15. 结构体中的LNode与*LinkList
  16. 基于卫星测深的牙买加沿岸水深测量
  17. 12.2 两个重要级数
  18. 英伟达发布528.02 WHQL 新驱动,支持4070 Ti
  19. 多功能Web文件管理器Filestash
  20. 关系数据理论(回顾关系模式、数据依赖、不规范的关系模式存在的问题、 函数依赖、非平凡函数依赖/平凡函数依赖、完全函数依赖/部分函数依赖定义、传递函数依赖,码)

热门文章

  1. 关于IT人职业道德的反思(转)
  2. 【实战经验分享】一劳永逸的解决网线随意热插拔问题
  3. Java多线程引发的性能问题,怎么解决?
  4. Git问题Everything up-to-date解决
  5. Qt信号与槽传递自定义数据类型——两种解决方法
  6. git remote添加其他SSH端口
  7. Python情感分析:鹿晗的粉丝们究竟原谅他了吗?
  8. HACKER'S DELIGHT[算法心得]笔记
  9. 你不曾见过的酷炫地图可视化作品(一)
  10. windows server 2003 IIS6.0部署PHP