PHP怎样大幅度降低图片大小但最大程度保持图片清晰?
经常会用到把上传的大图片压缩,特别是体积,在微信等APP应用上,也默认都是有压缩的,那么,怎么样对图片大幅度压缩却仍能保持较高的清晰度呢?
压缩通常是有按比例缩放,和指定宽度压缩的,效果很不错,一个数码相机拍的4M图片,压缩后保持了较高的清晰度和原图宽高值,只有700K。
下面是本站的一个PHP图片缩放类。如果需要指定宽度和高度值的缩放,则需要另一个thumb类,thumb类已取代本类。
使用方法:
Php代码:
$source = 'test.jpg';
$dst_img = 'test_111.jpg';
$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(!emptyempty($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(emptyempty($dstImgName)) return false; $allowImgs = ['.jpg', '.jpeg', '.png', '.bmp', '.wbmp','.gif']; //如果目标图片名有后缀就用目标图片扩展名 后缀,如果没有,则用源图的扩展名 $dstExt = strrchr($dstImgName ,"."); $sourseExt = strrchr($this->src ,"."); if(!emptyempty($dstExt)) $dstExt =strtolower($dstExt); if(!emptyempty($sourseExt)) $sourseExt =strtolower($sourseExt); //有指定目标名扩展名 if(!emptyempty($dstExt) && in_array($dstExt,$allowImgs)){ $dstName = $dstImgName; }elseif(!emptyempty($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); } }
PHP怎样大幅度降低图片大小但最大程度保持图片清晰?相关推荐
- 实现图片大小的自动控制( 图片大小控制CSS代码)
图片大小控制CSS代码 将以下代码放到你的样式表文件中即可实现图片大小的自动控制. /*图片大小控制CSS By Tekin */ img,a img{ border:0; margin:0; pad ...
- 怎样设置图片大小php,php调整图片大小的方法
php调整图片大小的方法 发布时间:2020-06-12 16:37:04 来源:亿速云 阅读:136 作者:小新 本篇文章和大家了解一下php调整图片大小的方法.有一定的参考价值,有需要的朋友可以参 ...
- android+怎么分享图片大小,Android微信分享图片大于32k进行压缩
微信分享视频的时候,需要传一个图片数组,大小不能大于32k. 解决方案:使用Bitmap自带的compress方法解决了这个问题. 源码如下: package com.example.test; im ...
- 解决md导入CSDN中图片大小过大 改变图片的大小
问题描述: 本人喜欢使用 typora 写笔记,但是每次一到上传博客就会变得十分头疼,尤其是图片的问题!!!比如我们现在上传一张图片: 这个图片的尺寸是不是太大了!!! 解决: 其实,当你拖入图片的时 ...
- php 截取图片大小,PHP截取指定图片大小的方法
这篇文章主要介绍了PHP截取指定图片大小的方法,可实现对指定图片的缩放与截取功能,是非常实用的技巧,需要的朋友可以参考下 本文实例讲述了PHP截取指定图片大小的方法.分享给大家供大家参考.具体分析如下 ...
- Word2019 如何快速统一图片大小,将其他图片设置为参照图片大小
1.首先选择一张图片,点击格式菜单,找到大小模块的下角标,点击弹出布局大小的设置. 2.然后将缩放部分的 锁定纵横比以及相对原始图片大小的勾选去掉,此处可以按照需求调节高德以及宽度的值,点击确定按钮. ...
- 如何压缩图片大小?简单的图片压缩方法分享
怎么压缩图片的大小呢?在日常生活中,我们经常需要在社交媒体上或者其他场合分享和使用照片,但是如果照片文件内存过大,上传或发送速度很慢,有的情况下还会出现上传失败的情况.遇到这种事情我们就需要将图片的大 ...
- 怎么扩大图片大小?如何调整图片大小不变形?
做广告设计的小伙伴在修改图片尺寸的时候,会发现图片扩大(在线修改图片尺寸大小工具-压缩图)之后变形了,那么该怎么避免图片改大小后宽高比例改变呢?选择一款好用的图片尺寸修改工具至关重要,下面就带大家一起 ...
- img 错误样式css,css设置图片大小_css 控制img图片的大小样式
摘要 腾兴网为您分享:css 控制img图片的大小样式,掌上财富,优品多多,问作业,淘客联盟等软件知识,以及手机游戏开挂神器,au补丁,局域网监测,苹果录屏专家,重复文件删除,易通教育,章鱼输入法,爱 ...
最新文章
- 编译安装apr 1.5.2 时报 rm: cannot remove `libtoolT': No such file or directory
- 【Fragment】管理机制
- python opencv 画矩形框 外接矩形
- 位操作——整数用位存储
- 【论文解读】A Survey on Visual Transformer及引文理解
- 网站计数器 web映射
- WIFI无线路由器的五种工作模式
- 【Java从0到架构师】MyBatis - 多表查询_延迟加载
- [翻译]Chameleon介绍(6) : 动作控件
- JavaScript 设计模式 —— 单例模式
- java读写word模板_Java操作Word模板插入列表
- 彩云之巅(一) 回忆的牵绊
- gluster部署和使用
- MongoDB系列之添加账号和密码
- Oracle PLSQL
- 关于OnCreate和OnDraw
- 从程序员到项目经理(5):程序员加油站 -- 不是人人都懂的学习要点--------转自西西吹雪...
- python获取期货数据_股票超过压力位
- android zuk彩蛋,联想ZUK Z2你真的会玩吗?来看U-Touch 2.0的那些小彩蛋
- 【JS 逆向百例】层层嵌套!某加速商城 RSA 加密