我们经常会用到把上传的大图片压缩,特别是体积,压缩通常是按比例缩放和指定宽度压缩的。一个4M的图片,压缩后只有700K,保持了较高的清晰度和原图宽高值,只有700K。

下面是代码(有两个文件 imgcompress.class.php 类,及 compress.php)

compress.php

<?php
require_once 'imgcompress.class.php';
# 原图文件名
$source = 'test.png';
# 保存图片的文件名
$dst_img = 'test_.png';
# 原图压缩,不缩放,但体积大大降低
$percent = 1;
$image = (new imgcompress($source, $percent))->compressImg($dst_img);

imgcompress.class.php

<?php/*** 图片压缩类:通过缩放来压缩。* 如果要保持源图比例,把参数$percent保持为1即可。* 即使原比例压缩,也可大幅度缩小。数码相机4M图片。也可以缩为700KB左右。如果缩小比例,则体积会更小。** 结果:可保存、可直接显示。*/
class imgcompress
{private $src;private $image;private $imageinfo;private $percent = 0.5;/*** 图片压缩** @param $src 源图* @param float $percent*            压缩比例*/function __construct($src, $percent = 1){$this->src = $src;$this->percent = $percent;}/*** 高清压缩图片** @param string $saveName*            提供图片名(可不带扩展名,用源图扩展名)用于保存。或不提供文件名直接显示*/function compressImg($saveName = ''){$this->_openImage();if (!empty($saveName))$this->_saveImage($saveName); // 保存else$this->_showImage();}/*** 内部:打开图片*/private function _openImage(){list ($width, $height, $type, $attr) = getimagesize($this->src);$this->imageinfo = array('width' => $width,'height' => $height,'type' => image_type_to_extension($type, false),'attr' => $attr);$fun = "imagecreatefrom" . $this->imageinfo['type'];$this->image = $fun($this->src);$this->_thumpImage();}/*** 内部:操作图片*/private function _thumpImage(){$new_width = $this->imageinfo['width']; // * $this->percent;$new_height = $this->imageinfo['height']; // * $this->percent;$image_thump = imagecreatetruecolor($new_width, $new_height);// 将原图复制带图片载体上面,并且按照一定比例压缩,极大的保持了清晰度imagecopyresampled($image_thump, $this->image, 0, 0, 0, 0, $new_width, $new_height, $this->imageinfo['width'], $this->imageinfo['height']);imagedestroy($this->image);$this->image = $image_thump;}/*** 输出图片:保存图片则用saveImage()*/private function _showImage(){header('Content-Type: image/' . $this->imageinfo['type']);$funcs = "image" . $this->imageinfo['type'];$funcs($this->image);}/*** 保存图片到硬盘:** @param string $dstImgName*            1、可指定字符串不带后缀的名称,使用源图扩展名 。2、直接指定目标图片名带扩展名。*/private function _saveImage($dstImgName){if (empty($dstImgName))return false;$allowImgs = ['.jpg','.jpeg','.png','.bmp','.wbmp','.gif']; // 如果目标图片名有后缀就用目标图片扩展名 后缀,如果没有,则用源图的扩展名$dstExt = strrchr($dstImgName, ".");$sourseExt = strrchr($this->src, ".");if (!empty($dstExt))$dstExt = strtolower($dstExt);if (!empty($sourseExt))$sourseExt = strtolower($sourseExt);// 有指定目标名扩展名if (!empty($dstExt) && in_array($dstExt, $allowImgs)) {$dstName = $dstImgName;} elseif (!empty($sourseExt) && in_array($sourseExt, $allowImgs)) {$dstName = $dstImgName . $sourseExt;} else {$dstName = $dstImgName . $this->imageinfo['type'];}$funcs = "image" . $this->imageinfo['type'];$funcs($this->image, $dstName);}/*** 销毁图片*/function __destruct(){imagedestroy($this->image);}
}

推荐压缩比率设置在0.7左右就可以了。

PHP图片高清晰度无损压缩相关推荐

  1. C#实现图片的无损压缩

    /// <summary> /// 图像缩略图处理 /// </summary> /// <param name="bytes">图像源数据&l ...

  2. 在线压缩图片,在线无损压缩图片

    如果图片不是很多,可以用这个 http://www.bejson.com/ui/compress_img/

  3. 批量图片压缩的方法-免费批量无损压缩软件

    那么为什么要做图片压缩呢? 因为减少图片文件的大小可以减少请求的带宽,从而加快页面加载的速度.除了代码的压缩外,网页中使用最多的资源文件就是图片,在一般的网站中,图片资源占有的比重还是挺大的.图片压缩 ...

  4. 如何能免费将图片无损压缩到100K?

    到提交资料系统提示图片过大无法上传的情况,大多都限制100K以内,那么有哪些免费将图片进行无损压缩的方法呢? 方法1:截图 平时工作或学习中经常使用QQ或微信这些聊天软件肯定对截图不陌生,其实截图都是 ...

  5. 简单的BMCP位图图片压缩算法

    此算法并不高深,各位专业人士可以飘过了Orz.并且如果各位知道一些图片格式与压缩算法的话,从中应该可以看到一些相似的"影子". PS:本人非专业人士,以下有说错的敬请各位谅解:) ...

  6. [css] 描述下你所了解的图片格式及使用场景

    [css] 描述下你所了解的图片格式及使用场景 通常网页在显示的图片(图形)的时候,有以下几种格式:GIF.PNG.JPG.SVG,还有个比较新的WebP格式.▍GIF优点:GIF是动态的:支持无损耗 ...

  7. linux中打开gif图片命令,在Linux终端中安装使用Gifski创建GIF动图

    Gifski 是一款跨平台的高质量 GIF 编码器,在 Linux 终端中可以安装及使用 Gifski 来创建高质量的 GIF 动图及使用 Gifski 从视频创建 GIF 动图. Gifski 简介 ...

  8. ImageCompressor图片压缩

    前端图片上传服务器预处理压缩 今天介绍的主角是(ImageCompressor),是一款可以将图片进行无损压缩的插件,谁用谁香. 1.首先安装插件 // yarn 安装 yarn add image- ...

  9. iOS包体积优化-图片优化

    文中提到的优化措施,编写了python自动化脚本,适用于iOS项目. 地址:GitHub - dongzhixuanyuan/imagesOptimize: Optimize images to de ...

  10. Android 各种图片格式

    目前android支持的5种图片格式,就是svg.png.webp.jpeg.gif.bmp.使用最多的还是png格式,因为支持RGB三色和透明度设置,可以设置很好的logo效果.SVG格式,则是因为 ...

最新文章

  1. 用Python爬取WordPress官网所有插件
  2. LightOJ 1088 - Points in Segments 二分
  3. resetroot_169route_python2(用于ubuntu12.04和14.04,centos系列)
  4. python 多次匹配_Python学习记录14
  5. hdu 4536 dfs
  6. 迅为-iMX6ULL开发板原创嵌入式开发文档系统化学习
  7. 针对初学者的 MQL 5 中的自定义指标
  8. 0基础,如何快速学习自媒体,详细教程
  9. python爬虫遇到动态加密怎么办?爬取某点评网站内容
  10. 光纤交换机配置zone
  11. android声波通信demo,Android声波通信改进版
  12. 基于 Java 的 I Don’t Wanna Be The Bugger 冒险游戏【100010211】
  13. 神经网络人口预测matlab,利用MATLAB工具模拟实现人口预测实例分析.doc
  14. stp中交换机根端口的选举原则
  15. python获取pdf页数_Python读取pdf页面的一部分
  16. 点击图片跳转链接php,朱秉桂教你如何给一张图片添加点击跳转链接代码
  17. ElasticSearch_高级_(集群+分片)
  18. Dracula theme
  19. 分享一些微信支付/分账后端代码及问题收录
  20. 最近16款免费的Wordpress主题

热门文章

  1. windows 清除记录ftp账号
  2. 溯源项目(全套源码)
  3. 用户粘性︱如何提升用户忠诚度
  4. 2020.10期权合约产品研究报告 | TokenInsight
  5. IT项目经理面试题分解
  6. 《FPGA设计实战演练》学习笔记(二)FPGA核心板电路设计
  7. Java中的设计模式【我终于懂设计模式了】
  8. 记一次https的免费ssl证书安装及配置过程--window系统
  9. 股票因子扩展2(双神因子计算)——从零到实盘5
  10. 笔记本电脑上如何创建html,笔记本怎么创建wifi_笔记本电脑怎么创建无线网络-win7之家...