php图片压缩

PHP 2019年05月08日 23:35 Norsl 188 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

最新评论

  • zgcwkj : 一样~~~
  • 萧瑟 : 可靠吗?
  • 小趣 : 这个目前没有尝试过
  • repostone : 从来没用过这些。
  • repostone : 顺便路过,留下一个足迹。
  • 林三 : 我也很久没有清理友链了,现在更新和回复好多哇!
  • 林三 : 我也好久没有清理友链了,现在更新和回复已经很忙了的说。
  • Norsl : 已经更新好了,就是访问你之前的域访问不到了。
  • 淡然若雅 : 换了新域名,有时间添加下。
  • Norsl : 这存款都是每个月工资里面抠出来的。哈哈哈