您正在使用 IPV4 [3.235.22.225] 访问本站,您本次已经查看了 1 页
用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
[公益]保护绿色环境,构建和谐社会       悟空收录网      

【腾讯云】 爆款2核2G3M云服务器首年 61元,叠加红包再享折上折      
[公益] 地球是我家,绿化靠大家      
2024年 清明节 006
2024年 劳动节 033
2025年 元 旦 278
2025年 春 节 306
 
您现在的位置:首页 >> PHP >> 内容
本类新增
本类热门
php高清晰度无损图片压缩功能的实现代码
内容摘要: compress.php?phprequire_once 'imgcompress.class.php';$source = 'test.png';//原图文件名$dst_img = 'test_.png';//保存图片的文件名$percent = ; #原图压缩,不缩放,但体积大大降低 $image = (new imgcompress($source,$......
compress.php

<?php

require_once 'imgcompress.class.php';

$source = 'test.png';//原图文件名

$dst_img = 'test_.png';//保存图片的文件名

$percent = ; #原图压缩,不缩放,但体积大大降低

$image = (new imgcompress($source,$percent))->compressImg($dst_img);

imgcompress.class.php

<?php

/**

* 图片压缩类:通过缩放来压缩。

* 如果要保持源图比例,把参数$percent保持为即可。

* 即使原比例压缩,也可大幅度缩小。数码相机M图片。也可以缩为KB左右。如果缩小比例,则体积会更小。

*

* 结果:可保存、可直接显示。

*/

class imgcompress{

private $src;

private $image;

private $imageinfo;

private $percent = .;

/**

* 图片压缩

* @param $src 源图

* @param float $percent 压缩比例

*/

public function __construct($src, $percent=)

{

$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,,,,,$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 、可指定字符串不带后缀的名称,使用源图扩展名 。、直接指定目标图片名带扩展名。

*/

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 左右就不错了,压缩后的图片与原图质量基本一样

版权声明:本内容来源于网络,如有侵犯您的版权,请联系站长,本站收到您的信息后将及时处理。
上一篇:一个简单的php图形验证码生成程序

 

下一篇:php编写的一个E-mail验证类

发布日期:2021/6/15
手机扫二维码直达本页
发布时间:12:34:56
点  击:11
录  入:壹家怡园
相关文章
Baidu
YiJiaCMS 7.3.8 build231228(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,Cloudflare提供加速防护
运行时间载入中.....