【问题标题】:How to compress image file size laravel如何压缩图像文件大小 laravel
【发布时间】:2018-08-01 08:30:42
【问题描述】:

我在 AWS 上的 S3 存储桶中有一些图像。我正在尝试获取图像并将它们发送到我的 android 应用程序(以及我数据库中的其他信息)。我当前的设置工作正常,但我想在将它们发送到应用程序之前减小图像文件大小(目前约为 1-1.5mb)。

我已尝试使用此代码:

function compress($source, $destination, $quality) {

    $info = getimagesize($source);

    if ($info['mime'] == 'image/jpeg') 
        $image = imagecreatefromjpeg($source);

    elseif ($info['mime'] == 'image/gif') 
        $image = imagecreatefromgif($source);

    elseif ($info['mime'] == 'image/png') 
        $image = imagecreatefrompng($source);

    imagejpeg($image, $destination, $quality);

    return $destination;
}

$image_file = Storage::disk('s3_upload')->get("s3bucketpath");

$new_image_file = $this->replace_extension($image->filename, '.jpg');

$this->compress($image_file,$new_image_file, 50);

我明白了

failed to open stream: No such file or directory in file

来自

的错误
$info = getimagesize($source);

我已经检查了文件路径,它在存储桶中并且存在,我已经转储了源并得到了

�����JFIF���������C�$<'$!!$J58,<XM\[VMUSam�vag�hSUy�z������^t������������C$ $G''G�dUd�����������������������������������������������������@0"�����������������A�����!1A"Q2aq#B���3R�$4b�rC���%S���5D������������������#�����!1A2"Q#�����?���HS-�� ��� ��B�@�)��(  @������
@����!@��������������(�����(����� �
@����UF�LHU@�d ��
@ �����)������@R��B����(�R���E]��(

(� @B'...

这样做的最佳方法是什么。

【问题讨论】:

  • 正在解决这个问题

标签: php image laravel amazon-s3


【解决方案1】:

如果您真的很想压缩和调整图像大小,您可以使用PNGQuant 之类的库来处理PNG compression 而不会损失质量,使用jpegoptim 来处理jpeg 图像。

【讨论】:

    【解决方案2】:

    尝试http://image.intervention.io/ 压缩文件。 简单高效。

    压缩细节: http://image.intervention.io/api/encode

    如何开始?简单地说:

    // include composer autoload
    require 'vendor/autoload.php';
    
    // import the Intervention Image Manager Class
    use Intervention\Image\ImageManager;
    
    // create an image manager instance with favored driver
    $manager = new ImageManager(array('driver' => 'imagick'));
    
    // to finally create image instances
    $image = $manager->make('public/foo.jpg')->resize(300, 200);
    

    【讨论】: