`
sylearning
  • 浏览: 8584 次
文章分类
社区版块
存档分类
最新评论

PHP怎样大幅度降低图片大小但最大程度保持图片清晰?

    博客分类:
  • PHP
阅读更多

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

 

 

压缩通常是有按比例缩放,和指定宽度压缩的,效果很不错,一个数码相机拍的4M图片,压缩后保持了较高的清晰度和原图宽高值,只有700K

下面是本站的一个PHP图片缩放类。如果需要指定宽度和高度值的缩放,则需要另一个thumb类,thumb类已取代本类。

 

 

使用方法:

 

$source =  'test.jpg';
$dst_img = 'test_111.jpg';
$percent = 1;  #原图压缩,不缩放,但体积大大降低
$image = (new imgcompress($source,$percent))->compressImg($dst_img);

 

相关类文件如下,保存为imgcompress.class.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);
       }

}
0
0
分享到:
评论

相关推荐

    PHP 按一定比例压缩图片,保持清晰度

    压缩过程中,保持图片的元数据(如EXIF信息)可以保留原始拍摄参数,对后期处理有所帮助。在使用GD库时,元数据通常会丢失,而Imagick可以保留大部分元数据。 7. 利用缓存: 对于频繁访问的图片,可以将压缩后的...

    php 上传类,用于修改上传图片大小

    2. **限制文件大小**:开发者可以通过配置参数限制上传图片的最大大小,防止过大文件导致服务器负载过高或内存溢出。 3. **图像处理**:类内部可能使用了GD库或者Imagick扩展,对上传的图片进行缩放、裁剪、旋转等...

    支持图片上传及实时显示,可设置显示图片的大小。由php、Ajax、javascript开发

    在IT行业中,图片上传与实时显示是常见的功能需求,尤其在网页应用中。这个项目是用PHP、Ajax和JavaScript这三种技术实现的,允许用户上传图片并即时预览,同时还可以调整显示的图片大小。接下来,我们将深入探讨...

    图片上传-可以限制图片的大小和类型

    压缩时需注意保持图片质量与文件大小的平衡。 2. **图片类型限制**: - **原因**:不同的图片格式有不同的特点,例如JPEG适合照片,PNG适合透明背景等。此外,某些格式可能包含恶意代码,限制类型可提高安全性。 ...

    PHP裁剪图片成固定大小

    PHP裁剪图片成固定大小,图片会按比例压缩。

    PHP获取远程图片并调整图像大小

    *函数:调整图片尺寸或生成缩略图 *修改:2013-2-15 *返回:True/False *参数: * $Image 需要调整的图片(含路径) * $Dw=450 调整时最大宽度;缩略图时的绝对宽度 * $Dh=450 调整时最大高度;缩略图时的绝对高度 * $Type=1...

    PHP图片缩放水印类.zip

    - **比例缩放模式**:按照指定的比例调整图片大小,保持原图的纵横比,可能产生黑边或白边。 - **缩放填充模式**:先按比例缩放图片,然后填充到目标尺寸,通常会用背景色填充多余部分。 3. **处理水印图**:水印...

    PHP实现图片压缩并调整大小

    在PHP中,图片压缩和调整大小是常见的任务,特别是在网页开发和服务器端处理图像时。以下将详细讲解如何使用PHP来实现这一功能。 首先,我们需要引入一个PHP的图像处理库,GD库是PHP内置的标准图像处理库,可以处理...

    把图片压缩到指定的大小下.php

    把图片压缩到指定大小以下。若一次不行可再次压缩

    压缩调整图片尺寸的PHP类.zip

    等比压缩则是为了保持图片的原始比例,避免拉伸或扭曲图片导致失真。 这个PHP类可能包括以下核心功能: 1. 图片上传:类可能提供一个方法用于接收和验证用户上传的图片文件,确保它们是合法的图像文件(如JPEG、...

    html5图片上传插件预览图片尺寸大小上传代码

    // 这里可以添加代码来限制图片尺寸,例如保持宽高比缩放至最大1000x1000 var maxWidth = 1000; var maxHeight = 1000; var scale; if (imgWidth &gt; imgHeight) { scale = maxWidth / imgWidth; } else { ...

    php文件上传大小客户端判断

    在PHP开发中,文件上传是常见的功能之一,但如何有效地管理文件上传的大小限制,以防止服务器因处理过大的文件而出现性能问题,是开发者必须考虑的问题。标题"php文件上传大小客户端判断"指的是在客户端(通常是用户...

    修改PHP上传文件大小限制

    修改PHP上传文件大小限制

    php缩略图php图片缩放php图片压缩

    质量参数通常是一个介于0和100之间的值,数值越小,压缩程度越大,但图像质量可能会降低。 在提供的文件列表中,有两个脚本: - `thumb.php`:这个脚本很可能是用于创建缩略图的。它可能包含一个函数或类,接收原...

    在线图片修改源码 图片大小任意设置

    在线图片修改源码是一种用于调整和优化数字图像的软件或应用程序的源代码,它允许用户在互联网上直接处理他们的图片,而无需下载和安装额外的软件。这种源码通常包括了图片大小调整、裁剪、旋转等基本功能,有时甚至...

    PHP图片上传、加水印及生成清晰缩略图等综合处理类

    这个类提供了创建高质量缩略图的方法,可以保持原始图片的宽高比,并通过插值算法确保缩略图的清晰度。开发者可以通过设定目标宽度和高度来生成不同尺寸的缩略图,同时可以指定是否等比例缩放,避免图片变形。 使用...

    关于修改Roundcube Webmail上传附件的大小

    这里需要注意的是,这些值可以根据实际需要进行调整,但通常建议保持`upload_max_filesize`和`post_max_size`的值相同或接近,以避免出现因设置不一致导致的问题。 2. **修改`php.ini`配置文件** 在服务器上找到`...

    生成缩略图减小图片体积(PHP)

    图片是网站内容的重要组成部分,但大尺寸的图片可能会导致页面加载速度变慢,影响用户体验。为了解决这个问题,开发者经常需要生成缩略图来减小图片体积。PHP作为广泛使用的服务器端脚本语言,提供了丰富的图像处理...

    kindeditor上传图片自动压缩过大的图片

    6. **保存压缩图片**:将缩放后的图像数据保存为新的文件,通常会降低图片质量以减小文件大小。 7. **返回结果**:在服务器端脚本中,将新图片的URL作为响应返回给KindEditor,编辑器会将其插入到文档中。 此外,还...

    php处理图片方法

    减少图片的像素意味着减少这些点的数量,从而降低图片的分辨率,这通常会导致图片尺寸变小,加载速度更快,但可能会影响清晰度。以下是一些PHP中用于处理图片的常用库和函数: 1. GD库:PHP的GD库是处理图片的基础...

Global site tag (gtag.js) - Google Analytics