本文实例讲述了PHP全功能无变形图片裁剪操作类与用法。分享给大家供大家参考,具体如下:

如果需要图片裁剪,或生成缩略图,这个基本上没有问题,全部需要的功能都在里面,全部都是无变形的。

这里我们划分为四种模式:

1. 任意图片裁剪到指定大小,超过的,剧中裁剪,并且最大化缩放,不够的拉伸,2. 超过的剧中裁剪,而不足的,不拉伸,即只缩小,不放大裁剪,会产生补白,可以用png透明度来消除3. 保留全部图片信息。不裁剪,只缩放,不足的补白。4. 保留全部图片信息。不裁剪,只缩放,不足的不补白,产生的图片为实际有效像素大小,例如有个图片是600X600 现在要生成 120X100 那么缩放后的实际有效像素为100X100,所以只生成100X100的图片,而第三种模式则生成120X100的大小,并且有补白

代码如下(此处代码通过本站在线工具http://tools.jb51.net/code/jb51_php_format做了格式化处理):<?php /*** Author : smallchicken* mode 1 : 强制裁剪,生成图片严格按照需要,不足放大,超过裁剪,图片始终铺满* mode 2 : 和1类似,但不足的时候 不放大 会产生补白,可以用png消除。* mode 3 : 只缩放,不裁剪,保留全部图片信息,会产生补白,* mode 4 : 只缩放,不裁剪,保留全部图片信息,生成图片大小为最终缩放后的图片有效信息的实际大小,不产生补白* 默认补白为白色,如果要使补白成透明像素,请使用SaveAlpha()方法代替SaveImage()方法** 调用方法:** $ic=new ImageCrop("old.jpg","afterCrop.jpg");* $ic->Crop(120,80,2);* $ic->SaveImage();* //$ic->SaveAlpha();将补白变成透明像素保存* $ic->destory();***/class ImageCrop { var $sImage; var $dImage; var $src_file; var $dst_file; var $src_width; var $src_height; var $src_ext; var $src_type; function ImageCrop($src_file,$dst_file="") { $this->src_file=$src_file; $this->dst_file=$dst_file; $this->LoadImage(); } function SetSrcFile($src_file) { $this->src_file=$src_file; } function SetDstFile($dst_file) { $this->dst_file=$dst_file; } function LoadImage() { list($this->src_width, $this->src_height, $this->src_type) = getimagesize($this->src_file); switch($this->src_type) { case IMAGETYPE_JPEG : $this->sImage=imagecreatefromjpeg($this->src_file); $this->ext="jpg"; break; case IMAGETYPE_PNG : $this->sImage=imagecreatefrompng($this->src_file); $this->ext="png"; break; case IMAGETYPE_GIF : $this->sImage=imagecreatefromgif($this->src_file); $this->ext="gif"; break; default: exit(); } } function SaveImage($fileName="") { $this->dst_file=$fileName ? $fileName : $this->dst_file; switch($this->src_type) { case IMAGETYPE_JPEG : imagejpeg($this->dImage,$this->dst_file,100); break; case IMAGETYPE_PNG : imagepng($this->dImage,$this->dst_file); break; case IMAGETYPE_GIF : imagegif($this->dImage,$this->dst_file); break; default: break; } } function OutImage() { switch($this->src_type) { case IMAGETYPE_JPEG : header("Content-type: image/jpeg"); imagejpeg($this->dImage); break; case IMAGETYPE_PNG : header("Content-type: image/png"); imagepng($this->dImage); break; case IMAGETYPE_GIF : header("Content-type: image/gif"); imagegif($this->dImage); break; default: break; } } function SaveAlpha($fileName="") { $this->dst_file=$fileName ? $fileName . ".png" : $this->dst_file .".png"; imagesavealpha($this->dImage, true); imagepng($this->dImage,$this->dst_file); } function OutAlpha() { imagesavealpha($this->dImage, true); header("Content-type: image/png"); imagepng($this->dImage); } function destory() { imagedestroy($this->sImage); imagedestroy($this->dImage); } function Crop($dst_width,$dst_height,$mode=1,$dst_file="") { if($dst_file) $this->dst_file=$dst_file; $this->dImage = imagecreatetruecolor($dst_width,$dst_height); $bg = imagecolorallocatealpha($this->dImage,255,255,255,127); imagefill($this->dImage, 0, 0, $bg); imagecolortransparent($this->dImage,$bg); $ratio_w=1.0 * $dst_width / $this->src_width; $ratio_h=1.0 * $dst_height / $this->src_height; $ratio=1.0; switch($mode) { case 1: // always crop if( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1)) { $ratio = $ratio_w < $ratio_h ? $ratio_h : $ratio_w; $tmp_w = (int)($dst_width / $ratio); $tmp_h = (int)($dst_height / $ratio); $tmp_img=imagecreatetruecolor($tmp_w , $tmp_h); $src_x = (int) (($this->src_width-$tmp_w)/2) ; $src_y = (int) (($this->src_height-$tmp_h)/2) ; imagecopy($tmp_img, $this->sImage, 0,0,$src_x,$src_y,$tmp_w,$tmp_h); imagecopyresampled($this->dImage,$tmp_img,0,0,0,0,$dst_width,$dst_height,$tmp_w,$tmp_h); imagedestroy($tmp_img); } else { $ratio = $ratio_w < $ratio_h ? $ratio_h : $ratio_w; $tmp_w = (int)($this->src_width * $ratio); $tmp_h = (int)($this->src_height * $ratio); $tmp_img=imagecreatetruecolor($tmp_w ,$tmp_h); imagecopyresampled($tmp_img,$this->sImage,0,0,0,0,$tmp_w,$tmp_h,$this->src_width,$this->src_height); $src_x = (int)($tmp_w - $dst_width) / 2 ; $src_y = (int)($tmp_h - $dst_height) / 2 ; imagecopy($this->dImage, $tmp_img, 0,0,$src_x,$src_y,$dst_width,$dst_height); imagedestroy($tmp_img); } break; case 2: // only small if($ratio_w < 1 && $ratio_h < 1) { $ratio = $ratio_w < $ratio_h ? $ratio_h : $ratio_w; $tmp_w = (int)($dst_width / $ratio); $tmp_h = (int)($dst_height / $ratio); $tmp_img=imagecreatetruecolor($tmp_w , $tmp_h); $src_x = (int) ($this->src_width-$tmp_w)/2 ; $src_y = (int) ($this->src_height-$tmp_h)/2 ; imagecopy($tmp_img, $this->sImage, 0,0,$src_x,$src_y,$tmp_w,$tmp_h); imagecopyresampled($this->dImage,$tmp_img,0,0,0,0,$dst_width,$dst_height,$tmp_w,$tmp_h); imagedestroy($tmp_img); } elseif($ratio_w > 1 && $ratio_h > 1) { $dst_x = (int) abs($dst_width - $this->src_width) / 2 ; $dst_y = (int) abs($dst_height -$this->src_height) / 2; imagecopy($this->dImage, $this->sImage,$dst_x,$dst_y,0,0,$this->src_width,$this->src_height); } else { $src_x=0; $dst_x=0; $src_y=0; $dst_y=0; if(($dst_width - $this->src_width) < 0) { $src_x = (int) ($this->src_width - $dst_width)/2; $dst_x =0; } else { $src_x =0; $dst_x = (int) ($dst_width - $this->src_width)/2; } if( ($dst_height -$this->src_height) < 0) { $src_y = (int) ($this->src_height - $dst_height)/2; $dst_y = 0; } else { $src_y = 0; $dst_y = (int) ($dst_height - $this->src_height)/2; } imagecopy($this->dImage, $this->sImage,$dst_x,$dst_y,$src_x,$src_y,$this->src_width,$this->src_height); } break; case 3: // keep all image size and create need size if($ratio_w > 1 && $ratio_h > 1) { $dst_x = (int)(abs($dst_width - $this->src_width )/2) ; $dst_y = (int)(abs($dst_height- $this->src_height)/2) ; imagecopy($this->dImage, $this->sImage, $dst_x,$dst_y,0,0,$this->src_width,$this->src_height); } else { $ratio = $ratio_w > $ratio_h ? $ratio_h : $ratio_w; $tmp_w = (int)($this->src_width * $ratio); $tmp_h = (int)($this->src_height * $ratio); $tmp_img=imagecreatetruecolor($tmp_w ,$tmp_h); imagecopyresampled($tmp_img,$this->sImage,0,0,0,0,$tmp_w,$tmp_h,$this->src_width,$this->src_height); $dst_x = (int)(abs($tmp_w -$dst_width )/2) ; $dst_y = (int)(abs($tmp_h -$dst_height)/2) ; imagecopy($this->dImage, $tmp_img, $dst_x,$dst_y,0,0,$tmp_w,$tmp_h); imagedestroy($tmp_img); } break; case 4: // keep all image but create actually size if($ratio_w > 1 && $ratio_h > 1) { $this->dImage = imagecreatetruecolor($this->src_width,$this->src_height); imagecopy($this->dImage, $this->sImage,0,0,0,0,$this->src_width,$this->src_height); } else { $ratio = $ratio_w > $ratio_h ? $ratio_h : $ratio_w; $tmp_w = (int)($this->src_width * $ratio); $tmp_h = (int)($this->src_height * $ratio); $this->dImage = imagecreatetruecolor($tmp_w ,$tmp_h); imagecopyresampled($this->dImage,$this->sImage,0,0,0,0,$tmp_w,$tmp_h,$this->src_width,$this->src_height); } break; } } // end Crop}?>

PS:这里再为大家推荐几款比较实用的图片处理工具供大家参考使用:

在线图片转换BASE64工具:http://tools.jb51.net/transcoding/img2base64

ICO图标在线生成工具:http://tools.jb51.net/aideddesign/ico_img

在线Email邮箱图标制作工具:http://tools.jb51.net/email/emaillogo

在线图片格式转换(jpg/bmp/gif/png)工具:http://tools.jb51.net/aideddesign/picext

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

php dimage加上域名,PHP全功能无变形图片裁剪操作类与用法示例相关推荐

  1. 史上最全基于vue的图片裁剪vue-cropper使用

    史上最全基于vue的图片裁剪vue-cropper使用 基于vue的图片裁剪vue-cropper 新的需求 vue-cropper官网 代码拷贝 最后 基于vue的图片裁剪vue-cropper 最 ...

  2. 关闭裁剪功能_4个图片裁剪技巧,瞬间看出Word大神与小白的差距!

    当我们用Word对长篇文档进行排版的时候,难免会插入一些图片,有时插入的图片大小尺寸不符合要求,就需要我们手动去裁剪调整.今天,这篇文章主要是介绍文档排版时,图片大小尺寸的设置方法,非常实用哦!Wor ...

  3. 计算机窗口预览图,window_Win7系统资源管理器加上预览窗格功能的方法,  图片缩略图是否太小?PPT - phpStudy...

    Win7系统资源管理器加上预览窗格功能的方法 图片缩略图是否太小?PPT如果预览一下是不是更好寻找文件?小编此次带来的一个比较实用的功能--在Win7系统的资源管理器开启窗格预览功能,不仅可以在右侧预 ...

  4. 百度发布国内首款云端全功能AI芯片,阿波龙L4无人车正式量产!

    策划编辑 | Vincent 作者 | Vincent 编辑 | Natalie AI 前线导读: 一年一度的百度 AI 开发者大会又来了~7 月 4 日,AI 前线记者奔赴大会前方,顶着北京的烈日骄 ...

  5. 【Android工具】更新WPS全功能正版授权无广告版

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 今天找到一个高校版的wps,回想一下最近我使用WPS好像没怎么弹广告,我记得我没整什么 ...

  6. 全网功能最全的无水印短视频提取工具

    介绍: 视频下载简介:全网功能最全的无水印短视频提取工具,只要输入短视频链接,即可一键下载超多的无水印视频哦,欢迎下载体验! 网盘下载地址: https://zijiewangpan.com/8SJk ...

  7. 基恩士PLC KV8000+XH16EC总线控制,全ST程序实例 全程序无加密,公司级框架,功能齐全,提供项目源码框架FB源码

    基恩士PLC KV8000+XH16EC总线控制,全ST程序实例,本人自己开发全程序无加密,公司级框架,功能齐全,提供项目源码框架FB源码,触摸屏源码. 需要一定ST基础才能看懂. 重在分享编程思想 ...

  8. 给你的cubeIDE加上翅膀--添加类似keil的代码补全功能!

    首先今天特别兴奋,在无数次尝试后,成功实现了cubeIDE的代码补全功能.先来个截图,免得有人说没图你说个XX. 其次感谢两个大神的文章.我也是碰巧搜索到而已,就抱着试试看的态度,做了一下,嘿~还真对 ...

  9. 松下SW-9585-C全功能DVD刻录机 狂降100+享受专业刻录!

    中关村在线 [无] 作者:中关村在线报道 2006年02月24日 11:11 随着数码产品的普及,越来越多的人选择用DV去记录下生活中的点点滴滴,用数码相机为朋友,家人随时随地拍摄相片,再用软件加上变 ...

最新文章

  1. 自动发布工具应该具备的11个标准特征
  2. 多平台支持:下一步容器技术热点
  3. cocos2d-x游戏开发 跑酷(四) 关联与物理世界
  4. Java程序员应该知道的10个Eclipse调试技巧
  5. 一加3支持android9吗,不忘老用户!一加3更新Android 9,网友:真的不将就
  6. [js]promise学习2
  7. adb配置环境变量没有反应
  8. DICOM 开源工具汇总
  9. 开启注册丨ACL-IJCAI-SIGIR顶级会议论文报告会(AIS 2020)
  10. 【国家集训队】跳跳棋(LCA+二分答案)
  11. 【项目管理工具】—— Microsoft Office Project 介绍
  12. 【韩顺平Linux】学习笔记1
  13. 2017年7月工作总结
  14. sql注入漏洞与如何解决
  15. HAP_新建客户(头行结构)
  16. java中的jsp文件创建_在JSP中创建文件夹和文件
  17. 神舟 linux支持内存插槽,关于在神舟电脑里折腾linux的诸多麻烦
  18. qtcreate添加资源文件之后该文件变成只读
  19. 网络应用之javascript循环语句
  20. selenium 教程 java_java selenium教程环境搭建方法

热门文章

  1. tomcat的三种部署方式
  2. (入门SpringBoot)SpringBoot结合redis(四)
  3. Django Form -- 对单个表单的组合验证
  4. 进入Linux单用户模式
  5. 板邓:【WordPress文件解读】wp-config.php
  6. python3-字典中的一些常用方法
  7. ASP.NET身份验证机制membership入门——配置篇(1){转}
  8. [Python人工智能] 二.theano实现回归神经网络分析
  9. 【数据结构与算法】之深入解析“重新安排行程”的求解思路与算法示例
  10. LeetCode Algorithm 217. 存在重复元素