视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
php怎么实现图片压缩
2020-11-02 18:24:15 责编:小采
文档


php实现图片压缩的方法:首先通过“openImage”方法打开图片;然后使用“thumpImage”操作图片;接着将原图复制到图片载体上,并按照一定比例压缩;最后输出图片即可。

推荐:《PHP视频教程》

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);
 }
}
$source = '123.png';//原图片名称
$dst_img = 'text.png';//压缩后图片的名称
$percent = 1; #原图压缩,不缩放,但体积大大降低
$image = (new imgcompress($source,$percent))->compressImg($dst_img);

下载本文
显示全文
专题