PHP图片高清晰度无损压缩
我们经常会用到把上传的大图片压缩,特别是体积,压缩通常是按比例缩放和指定宽度压缩的。一个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图片高清晰度无损压缩相关推荐
- C#实现图片的无损压缩
/// <summary> /// 图像缩略图处理 /// </summary> /// <param name="bytes">图像源数据&l ...
- 在线压缩图片,在线无损压缩图片
如果图片不是很多,可以用这个 http://www.bejson.com/ui/compress_img/
- 批量图片压缩的方法-免费批量无损压缩软件
那么为什么要做图片压缩呢? 因为减少图片文件的大小可以减少请求的带宽,从而加快页面加载的速度.除了代码的压缩外,网页中使用最多的资源文件就是图片,在一般的网站中,图片资源占有的比重还是挺大的.图片压缩 ...
- 如何能免费将图片无损压缩到100K?
到提交资料系统提示图片过大无法上传的情况,大多都限制100K以内,那么有哪些免费将图片进行无损压缩的方法呢? 方法1:截图 平时工作或学习中经常使用QQ或微信这些聊天软件肯定对截图不陌生,其实截图都是 ...
- 简单的BMCP位图图片压缩算法
此算法并不高深,各位专业人士可以飘过了Orz.并且如果各位知道一些图片格式与压缩算法的话,从中应该可以看到一些相似的"影子". PS:本人非专业人士,以下有说错的敬请各位谅解:) ...
- [css] 描述下你所了解的图片格式及使用场景
[css] 描述下你所了解的图片格式及使用场景 通常网页在显示的图片(图形)的时候,有以下几种格式:GIF.PNG.JPG.SVG,还有个比较新的WebP格式.▍GIF优点:GIF是动态的:支持无损耗 ...
- linux中打开gif图片命令,在Linux终端中安装使用Gifski创建GIF动图
Gifski 是一款跨平台的高质量 GIF 编码器,在 Linux 终端中可以安装及使用 Gifski 来创建高质量的 GIF 动图及使用 Gifski 从视频创建 GIF 动图. Gifski 简介 ...
- ImageCompressor图片压缩
前端图片上传服务器预处理压缩 今天介绍的主角是(ImageCompressor),是一款可以将图片进行无损压缩的插件,谁用谁香. 1.首先安装插件 // yarn 安装 yarn add image- ...
- iOS包体积优化-图片优化
文中提到的优化措施,编写了python自动化脚本,适用于iOS项目. 地址:GitHub - dongzhixuanyuan/imagesOptimize: Optimize images to de ...
- Android 各种图片格式
目前android支持的5种图片格式,就是svg.png.webp.jpeg.gif.bmp.使用最多的还是png格式,因为支持RGB三色和透明度设置,可以设置很好的logo效果.SVG格式,则是因为 ...
最新文章
- 用Python爬取WordPress官网所有插件
- LightOJ 1088 - Points in Segments 二分
- resetroot_169route_python2(用于ubuntu12.04和14.04,centos系列)
- python 多次匹配_Python学习记录14
- hdu 4536 dfs
- 迅为-iMX6ULL开发板原创嵌入式开发文档系统化学习
- 针对初学者的 MQL 5 中的自定义指标
- 0基础,如何快速学习自媒体,详细教程
- python爬虫遇到动态加密怎么办?爬取某点评网站内容
- 光纤交换机配置zone
- android声波通信demo,Android声波通信改进版
- 基于 Java 的 I Don’t Wanna Be The Bugger 冒险游戏【100010211】
- 神经网络人口预测matlab,利用MATLAB工具模拟实现人口预测实例分析.doc
- stp中交换机根端口的选举原则
- python获取pdf页数_Python读取pdf页面的一部分
- 点击图片跳转链接php,朱秉桂教你如何给一张图片添加点击跳转链接代码
- ElasticSearch_高级_(集群+分片)
- Dracula theme
- 分享一些微信支付/分账后端代码及问题收录
- 最近16款免费的Wordpress主题
热门文章
- windows 清除记录ftp账号
- 溯源项目(全套源码)
- 用户粘性︱如何提升用户忠诚度
- 2020.10期权合约产品研究报告 | TokenInsight
- IT项目经理面试题分解
- 《FPGA设计实战演练》学习笔记(二)FPGA核心板电路设计
- Java中的设计模式【我终于懂设计模式了】
- 记一次https的免费ssl证书安装及配置过程--window系统
- 股票因子扩展2(双神因子计算)——从零到实盘5
- 笔记本电脑上如何创建html,笔记本怎么创建wifi_笔记本电脑怎么创建无线网络-win7之家...