php图片压缩

PHP 2019年05月08日 23:35 Norsl 24 0

最近需要,写的一个图片压缩,压缩效率还行,测试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;
      }
    }


说点什么吗?

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

*
*
验证码

Norsl の 个人名片

职业:web开发

现居:四川 成都

Git:https://gitee.com/norsl

邮箱:3136904131@qq.com

最新评论

  • Norsl : 当时都以为凉凉了,不然现在就是空库了
  • LILI : 有惊无险啊哈
  • 林三 : 原谅我每次过来都找不到地方说话,你哪些代码函数太深奥,我确实看不懂呢。
  • 热血学霸 : 感谢大佬分享,好人一生平安
  • 格瑞LILI : 你猜我是从哪看到你的博客的《-_-》
  • 格瑞LILI : 网站名称:格瑞LILI 网站地址:https://kaygb.top 网站描述:个人博客,分享学习生涯遇到的问题
  • zgcwkj : 给力啊!!!谢了
  • 妙文屋 : 写的很好,很喜欢
  • 马也随笔 : 这个记录评论者COOKIE功能挺实用的,有没有插件可以使用的,用的WP。
  • 林三 : 你厉害,我是追不上了,业务的太狠了。