php图片压缩

PHP 2019年05月08日 23:35 Norsl 84 1

最近需要,写的一个图片压缩,压缩效率还行,测试9.6M的图片压缩后为340KB(调整压缩率,我设置的0.3)

使用也简单,引入压缩类,实例化类的时候传入原图地址(绝对路径)和压缩率(0.1~1默认0.3)

类有两个对外方法,show()方法和save()方法

奈何技术有限,还不够完善。


Class::__construct(String $path [, Int $level])

$path为需要压缩的图片路径(绝对路径)

$level为压缩率,取值范围0.1~1,默认0.3


Class::show()

实例化对象后调用,直接输出压缩后的图片


Class::save([String $path])

实例化对象后调用,保存压缩后的图片到指定路径(默认原图位置)。参数$paht可选

返回压缩图片文件名称


使用方法:

require 'ImageCompress.php';

$image = new ImageCompress('./uploads/1.jpg');
echo $image->save();


压缩类:

<?php
    class ImageCompress{
    private $path;
    private $level = 0.3;
    private $ext;
    private $mime;
    private $imageResource;
    
    public function __construct($path, $level = 0){
        if(!file_exists($path)){
            return false;
        }
        
        $this->path = $path;
        if($level > 0){
            $this->level = $level;
        }
        
        $info = getimagesize($this->path);
        $this->mime = $info['mime'];
        list($width, $height) = $info;
        
        $newWidth  = $width * $this->level;
        $newHeight = $height * $this->level;
        
        $image = ("imagecreatefrom" . $this->getExt())($this->path);
        $newImage = imagecreatetruecolor($newWidth, $newHeight);
        imagecopyresized($newImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
        
        $this->imageResource = $newImage;
        
        imagedestroy($image);
    }
    
    
    // 直接输出压缩后的图片到浏览器进行预览
    public function show(){
        header('Content-type: ' . $this->mime);
        ('image' . $this->getExt())($this->imageResource);
        imagedestroy($this->imageResource);
    }
    
    
    // 保存压缩后的图片到指定路径,如果不指定路径则是原图所在路径
    public function save($path = ""){
        if($path == "" || !file_exists($path)){
            $path = dirname($this->path);
        }
        
        $name = explode('.', basename($this->path))[0] . '_' . imagesx($this->imageResource) . '_' . imagesy($this->imageResource);
        $savePath = $path . '/' . $name . '.' . $this->getExt();
        ('image' . $this->getExt())($this->imageResource, $savePath);
        imagedestroy($this->imageResource);
        return $name . '.' . explode('.', basename($this->path))[1];
    }
    
    
    // 通过mime获取文件后缀格式
    private function getExt(){
        if($this->ext){
            return $this->ext;
        }
        
         $this->ext = explode('/', $this->mime)[1];
         return $this->ext;
      }
    }


说点什么吗?

你的电子邮箱地址不会被公开。必填项已用 * 著名

*
*
验证码
  • 心灵博客 2019年06月02日 13:02

    测试9.6M的图片压缩后为340KB,要特定图片才可能有这样的压缩率。

Norsl の 个人名片

职业:web开发

现居:四川 成都

Git:https://gitee.com/norsl

邮箱:3136904131@qq.com

最新评论

  • Norsl : 当时我是把ip加黑了,然后前端加了关键字验证。现在他去祸害被人去了。。。
  • 林三 : 镜像是无法根治的,我们能做的就是保护自己的合法排名,然后要适当的申明自己是原创。
  • Norsl : 就是跟目标站内容一致的站点,会定期同步目标站的数据。
  • 叶夕青兮 : 没太搞明白,什么是镜像站
  • vultr : 估计是人家练手的
  • Norsl : 现在这个已经镜像别的网站去了,很迷
  • Norsl : 我也不知道为什么会被镜像,我网站流量算是很少的了,也是无意中发现的。
  • zgcwkj : 项目大佬,还有人镜像,我连镜像是什么都不知道!!!
  • Norsl : 我也有备份的习惯的,但备份脚本居然没运行,没有加到定时任务,怪我疏忽了。谢谢提醒
  • 心灵博客 : 我安装一开始就关闭binlog,耗资源,不过我有每天备份。 另外建议隔段时间做个快照。