如何压缩图像文件大小laravel

时间:2018-02-21 16:53:56

标签: php image laravel amazon-s3

我在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);

我检查了文件路径,它在存储桶中并且存在且我有var-dumped 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'...

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

2 个答案:

答案 0 :(得分:0)

尝试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);

答案 1 :(得分:0)

如果您真的非常认真地对图像进行压缩和调整大小,那么可以使用PNGQuant之类的库来PNG compression 而不会丢失质量,jpegoptim用于jpeg图像。