<?php
/*** 说明:函数功能是把一个图像裁剪为任意大小的图像,图像不变形* 参数说明:输入 需要处理图片的 文件名,生成新图片的保存文件名,生成新图片的宽,生成新图片的高*/
// 获得任意大小图像,不足地方拉伸,不产生变形,不留下空白
function my_image_resize($src_file, $dst_file, $new_width, $new_height)
{if ($new_width < 1 || $new_height < 1) {echo 'params width or height error !';die;}if (!file_exists($src_file)) {echo $src_file . ' is not exists !';die;}// 图像类型$type = exif_imagetype($src_file);$support_type = array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF);if (!in_array($type, $support_type, true)) {echo 'this type of image does not support! only support jpg , gif or png';die;}//Load imageswitch ($type) {case IMAGETYPE_JPEG:$src_img = imagecreatefromjpeg($src_file);break;case IMAGETYPE_PNG:$src_img = imagecreatefrompng($src_file);break;case IMAGETYPE_GIF:$src_img = imagecreatefromgif($src_file);break;default:echo 'Load image error!';die;}$w = imagesx($src_img);$h = imagesy($src_img);$ratio_w = (1.0 * $new_width) / $w;$ratio_h = (1.0 * $new_height) / $h;$ratio = 1.0;// 生成的图像的高宽比原来的都小,或都大 ,原则是 取大比例放大,取大比例缩小(缩小的比例就比较小了)if ($ratio_w < 1 && $ratio_h < 1 || $ratio_w > 1 && $ratio_h > 1) {if ($ratio_w < $ratio_h) {$ratio = $ratio_h;} else {$ratio = $ratio_w;}// 定义一个中间的临时图像,该图像的宽高比 正好满足目标要求$inter_w = (int) ($new_width / $ratio);$inter_h = (int) ($new_height / $ratio);$inter_img = imagecreatetruecolor($inter_w, $inter_h);imagecopy($inter_img, $src_img, 0, 0, 0, 0, $inter_w, $inter_h);// 生成一个以最大边长度为大小的是目标图像$ratio比例的临时图像// 定义一个新的图像$new_img = imagecreatetruecolor($new_width, $new_height);imagecopyresampled($new_img, $inter_img, 0, 0, 0, 0, $new_width, $new_height, $inter_w, $inter_h);switch ($type) {case IMAGETYPE_JPEG:imagejpeg($new_img, $dst_file, 100);// 存储图像break;case IMAGETYPE_PNG:imagepng($new_img, $dst_file, 100);break;case IMAGETYPE_GIF:imagegif($new_img, $dst_file, 100);break;default:break;}} else {$ratio = $ratio_h > $ratio_w ? $ratio_h : $ratio_w;//取比例大的那个值// 定义一个中间的大图像,该图像的高或宽和目标图像相等,然后对原图放大$inter_w = (int) ($w * $ratio);$inter_h = (int) ($h * $ratio);$inter_img = imagecreatetruecolor($inter_w, $inter_h);//将原图缩放比例后裁剪imagecopyresampled($inter_img, $src_img, 0, 0, 0, 0, $inter_w, $inter_h, $w, $h);// 定义一个新的图像$new_img = imagecreatetruecolor($new_width, $new_height);imagecopy($new_img, $inter_img, 0, 0, 0, 0, $new_width, $new_height);switch ($type) {case IMAGETYPE_JPEG:imagejpeg($new_img, $dst_file, 100);// 存储图像break;case IMAGETYPE_PNG:imagepng($new_img, $dst_file, 100);break;case IMAGETYPE_GIF:imagegif($new_img, $dst_file, 100);break;default:break;}}
}
my_image_resize('Lighthouse.jpg','new.jpg',200,200);

PHP实用图片压缩方法相关推荐

  1. Android应用开发中三种常见的图片压缩方法

    Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩). 一.质量压缩法private Bitmap comp ...

  2. 怎么压缩图片大小,图片压缩方法

    怎么压缩图片大小?工作中如果遇到一些体积较大的图片,尤其一些清晰度很高的图片,可能一张小尺寸的图片就有2-3M的大小,这个我们的使用打开造成很多的麻烦,例如因为超过限制大小而不能上传,打开的时候很大, ...

  3. 图片压缩怎么做?这几种图片压缩方法很方便

    怎么把图片给压缩一下呢?图片的内存如果太大,那我们不管是在发送还是保存都会不方便.发送时会非常缓慢,保存时也占据很多内存,对本来空间就不太够的电脑或手机来说是一个致命问题.缓解这方面问题我们可以将图片 ...

  4. Android图片压缩方法总结

    本文总结Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩). 第一:质量压缩方法: ? 1 2 3 4 5 ...

  5. iOS 图片压缩方法

    两种图片压缩方法 两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size). 压缩图片质量 NSData *data = UIImageJPEGRepresentation(ima ...

  6. Excel 表格图片压缩方法

    我们在工作,学习当中少不了用Excel 来制作各式各样的表格,其中有很多使用技巧,来提高我们的工作效率.下面介绍在EXCEL中压缩图片的方法: 一.如果你在EXCEL工作表中插入比较大的图片,保存为文 ...

  7. 图片太大怎么改小kb?简单的图片压缩方法分享

    平时当我们在朋友圈分享一些有趣的照片或者使用图片素材进行上传的时候,经常遇到图片大小kb超出平台限制的情况,这时就无法正常上传了,遇到这种情况我们就需要想办法降低图片大小kb,那么有什么办法能够压缩图 ...

  8. 图片怎么压缩到200K以内,这3个图片压缩方法,简单有效

    你没有遇到过上传图片到网站的时候,图片太大不能上传的情况?还有,许多报名照片要求小于200K,可是照片超过这个大小,应该如何压缩呢?下面我给大家带来3个图片压缩的方法,既能快速压缩图片大小,又保存画质 ...

  9. 怎样改变照片大小?免费在线图片压缩方法

    平时我们经常会遇到一些线上申请资料需要上传证件照,一般我们会通过一些手机软件制作并下载适合规格的照片,但除了尺寸要求外,还会限制图片大小.如何才能既不改变图片原来的尺寸仅仅将照片压缩到100KB以下呢 ...

最新文章

  1. python写一个文件下载器_Python3使用TCP编写一个简易的文件下载器
  2. ssm过滤器可以只过滤html吗,SSM登陆验证之过滤器实现
  3. 谷歌新模型刷新ImageNet纪录,第一作者是上海交大毕业生谢其哲
  4. python中mode_python中的model模板中的数据类型
  5. python读取字典数据_Python:读取列表[{}]中的字典数据
  6. sqlhelper中事务的简单用法(初学者)
  7. 【51Nod - 1117 】聪明的木匠 (贪心,哈夫曼树,时光倒流)
  8. hwclock: Open of /dev/rtc failed, errno=19: No such device.
  9. C语言单向动态链表程序,实现链表的建立,合并,重新排序,链表元素的插入与删除,以及根据元素成员的值进行元素删除。
  10. linux awk 某一列合并,利用shell中awk和xargs以及sed将多行多列文本中某一列合并成一行...
  11. Tex, LaTex概念及实例
  12. 银联在线支付B2C UnionPay.NET
  13. 屏蔽网页所有弹出广告的神器工具!Adblock插件
  14. Unity 获取GPS经纬度
  15. matlab学习---矩阵求最大值,赋值
  16. 硬盘异响(嗑啦嗑啦)的可能原因
  17. Netflix云原生微服务设计分析
  18. Ubuntu20.04安装搜狗拼音
  19. TCP SYNCookie机制
  20. Flux、Mono、Reactor 实战(史上最全)

热门文章

  1. 程序员生存定律[八] 借势的价值和力量
  2. Thin Plate Spline薄板样条
  3. 清华大学“姚班”十年:一场精英教育秀---转自中国教育报
  4. windows下linux子系统忘记密码,win10中的ubuntu子系统忘记root密码如果修改?
  5. Java时间日期显示
  6. 初步了解3d关节动画的概念
  7. Hexo主题模版推荐简约大方美丽的主题搭建教程
  8. 阿里笔试 8-28 字符串交换
  9. Taro小程序踩坑集锦
  10. 1万粉的小红书kol报价_小红书粉丝推广一次多少钱,小红书营销