经常会用到把上传的大图片压缩,特别是体积,在微信等APP应用上,也默认都是有压缩的,那么,怎么样对图片大幅度压缩却仍能保持较高的清晰度呢?

 压缩通常是有按比例缩放,和指定宽度压缩的,效果很不错,一个数码相机拍的4M图片,压缩后保持了较高的清晰度和原图宽高值,只有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  压缩比例*/public function __construct($src, $percent=1){$this->src = $src;$this->percent = $percent;}/** 高清压缩图片* @param string $saveName  提供图片名(可不带扩展名,用源图扩展名)用于保存。或不提供文件名直接显示*/public 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);}/*** 销毁图片*/public function __destruct(){imagedestroy($this->image);}}

使用之后个人感觉 $percent 设置为0.5 左右就不错了,压缩后的图片与原图质量基本一样。

原文:https://sylearning.iteye.com/blog/2368860

php高清晰度无损压缩相关推荐

  1. 使用libjpeg进行图片压缩(哈夫曼算法,无损压缩)

    Huffman算法也是一种无损压缩算法,但与LZW压缩算法不同,Huffman需要得到每种字符出现概率的先验知识.通过计算字符序列中每种字符出现的频率,为每种字符进行唯一的编码设计,使得频率高的字符占 ...

  2. DICOM医学图像处理:开源库mDCM与DCMTK的比较分析(一),JPEG无损压缩DCM图像(续)...

    2019独角兽企业重金招聘Python工程师标准>>> 背景: 上周通过单步调试,找出了开源库mDCM与DCMTK在对DICOM图像进行JPEG无损压缩时的细小区别,并顺利实现了在C ...

  3. GDCM:检测SIEMENS JPEG无损压缩图像的测试程序

    GDCM:检测SIEMENS JPEG无损压缩图像的测试程序 GDCM:检测SIEMENS JPEG无损压缩图像的测试程序 GDCM:检测SIEMENS JPEG无损压缩图像的测试程序 #includ ...

  4. 无电池摄像头如何实现高清晰度视频编码?

    本文来自日本法政大学理工学院副教授 周金佳在LiveVideoStackCon 2019上海大会演讲,介绍了一种可被广泛应用于监控系统的超低功耗的视频采集和编码系统,在保证画质的同时,可大大降低系统的 ...

  5. python 解压js压缩的图片_20行Python代码,无损压缩千百张图片!Python有多强!就不用说了...

    每个设计师.摄影师或有图片处理需求小编,都会面临批量 高清大图的困扰. 因为高清大图放到网站上会严重拖慢加载速度,或是有的地方明确限制了图片大小,因此,为了完成工作,他们总是需要先把图片压缩,再上传. ...

  6. vue图片压缩不失真_图片压缩会失真?快试试这几个无损压缩神器。

    前端通常在做网页的时候 会出现图片加载慢的情况 在这里我通常会将图片进行压缩 但是通常情况下 观众会认为 图片压缩会出现失真的现象 在这里我会向大家推荐几款图片压缩的工具 基本上会实现无损压缩 1.T ...

  7. 【转】DICOM医学图像处理:开源库mDCM与DCMTK的比較分析(一),JPEG无损压缩DCM图像

    转自:https://www.cnblogs.com/mfrbuaa/p/4004114.html 有修订 背景介绍: 近期项目需求,需要使用C#进行最新的UI和相关DICOM3.0医学图像模块的开发 ...

  8. 用数学运算实现数据无损压缩的算法

    用数学运算实现数据无损压缩的算法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&quo ...

  9. image.merge图像有什么变化_经常用到压缩软件的你,知道什么是无损压缩和有损压缩吗?...

    通过上一篇文章我们就应该知道了为什么要进行视频压缩,因为未经过压缩的视频数据量大的惊人,大大超出了我们的消费能力,而经过压缩后的视频不仅仅数据量有了巨大的降低,最主要的一方面是在经过高压缩比压缩过后, ...

  10. python视频压缩算法_Python入门到精通视频,阿里巴巴大力推荐,20行Python代码,无损压缩千百张图片!...

    阿里巴巴推荐,Python基础入门,Python小白书籍,Python学习路线,Python进阶,Python高级,Python爬虫等等一系列关于Python的文档和视频(包括hadoop,fink, ...

最新文章

  1. 一:搭建一套免费的serverless网站
  2. layui下拉框怎么获取自定义值_layui select获取自定义属性方法
  3. 无招胜有招之Java进阶JVM(六)JVM 参数及调优
  4. redistemplate注入为null_Windows DLL 注入技术
  5. 电脑底部任务栏点不动_虫洞 跨平台的电脑控制手机软件
  6. 学习vue3系列computed
  7. java工具类使用逗号切割字符串_【java】分割字符串工具类,霸气 jdk自带的
  8. sql server 语法 MSDN
  9. 25 个让 Java 程序员更高效的 Eclipse 插件
  10. java 神经网络算法_70行Java代码实现深度神经网络算法分享
  11. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-1.整合Mybatis访问数据库和阿里巴巴数据源...
  12. Camunda工作流引擎入门
  13. c语言 可以得什么软件下载,用C语言的软件哪可以下载啊?
  14. 各家船公司之GX介绍
  15. 中国人工智能发展的现状
  16. 企业级反向代理 Haproxy
  17. 张一鸣是如何练就字节跳动的
  18. 深度学习与人类语言处理学习笔记(二)—— 变声(理论篇)
  19. FileZilla软件安装教程
  20. jupyter 更改默认的文件保存路径

热门文章

  1. 程序员“好为人师”有错吗?
  2. 晶振负载电容和谐振电容的计算方法
  3. 神经系统及器官结构图片,神经系统的组织结构图
  4. Linux—— httpd
  5. java的泛型方法_Java中的泛型方法
  6. 免费图标:来自Samuray的免费电视/电影相关图标
  7. vue实现大转盘抽奖
  8. 四旋翼无人机学习第5节--STM32最小系统外围电路分析
  9. KK课表抓取教务系统
  10. 项目管理的五大过程组及十大知识领域