Laravel 图像干预压缩

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/31531569/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 11:59:34  来源:igfitidea点击:

Laravel image intervention compression

laravelcompressionintervention

提问by cardi777

I have a script which saves and caches images with intervention, and it's working 100%

我有一个脚本可以在干预下保存和缓存图像,并且它 100% 工作

However i am trying to work out how i can add 75% compression to jpg & png files, but i don't know i would apply it in this situation.

但是,我正在尝试解决如何将 75% 压缩添加到 jpg 和 png 文件,但我不知道我会在这种情况下应用它。

I didn't think PNG files could be compressed apart from software which does it, so im not really sure if its the same thing?

我不认为 PNG 文件可以与压缩软件分开,所以我不确定它是否是同一件事?

There is an example of compression here: http://image.intervention.io/api/save

这里有一个压缩示例:http: //image.intervention.io/api/save

/* ////////////////////// IMAGES //////////////////////// */
Route::get( '/media/{size}/{crop}/{name}', function ( $size = null, $crop = null, $name = null ) {
    if ( ! is_null( $size ) and ! is_null( $name ) and ! is_null( $crop ) ) {
        $size = explode( 'x', $size );

        $hours = 48;
        $cache_length = $hours * 60;

        switch ( $crop ) {

            /*///////////////////////// no crop and change ratio */
            case "0":
                $cache_image = Image::cache( function ( $image ) use ( $size, $name ) {
                    return $image->make( url( '/uploads/' . $name ) )->resize( $size[0], $size[1] )->sharpen(5);
                }, $cache_length);
                break;

            /*///////////////////////// crop - NO upsize */
            default:
            case "1":
                $cache_image = Image::cache( function ( $image ) use ( $size, $name ) {
                    return $image->make( url( '/uploads/' . $name ) )->fit( $size[0], $size[1], function ( $constraint ) {
                        $constraint->upsize();
                    } )->sharpen(5);
                }, $cache_length );
                break;

            /*///////////////////////// crop - WITH upsize */
            case "2":
                $cache_image = Image::cache( function ( $image ) use ( $size, $name ) {
                    return $image->make( url( '/uploads/' . $name ) )->fit( $size[0], $size[1], function ( $constraint ) {
                        //$constraint->upsize();
                    } )->sharpen(5);
                }, $cache_length );
                break;

            /*///////////////////////// No crop & add borders */
            case "3":

                $cache_image = Image::cache( function ( $image ) use ( $size, $name ) {

                    $image->make( url( '/uploads/' . $name ) )->resize( $size[0], $size[1], function ( $constraint ) {
                        $constraint->aspectRatio();
                        $constraint->upsize();
                    } )->sharpen(5);

                    $image->resizeCanvas($size[0], $size[1], 'center', false, array(255, 255, 255, 0.0));

                    return $image;

                }, $cache_length );
                break;

            /*///////////////////////// No crop */
            case "4":
                $cache_image = Image::cache( function ( $image ) use ( $size, $name ) {

                    $image->make( url( '/uploads/' . $name ) )->resize( $size[0], $size[1], function ( $constraint ) {
                        $constraint->aspectRatio();
                        $constraint->upsize();
                    } )->sharpen(5);

                    //$image->resizeCanvas($size[0], $size[1], 'center', false, array(255, 255, 255, 0.0));

                    return $image;

                }, $cache_length );
                break;

        }

        return Response::make( $cache_image, 200, [ 'Content-Type' => 'image' ] )->setMaxAge(604800)->setPublic();

    } else {
        abort( 404 );
    }
} );

采纳答案by Marco Pallante

Try the encode()method, where you can specify the formatand the quality(for jpg). So, everytime you use the cache, try to do this:

尝试该encode()方法,您可以在其中指定formatquality(for jpg)。因此,每次使用缓存时,请尝试执行以下操作:

$cache_image = Image::cache(function ($image) use ($size, $name) {

    $image
        ->make(...)
        ->...        // any other call to image manipulation methods
        ->encode('jpg', 75);

    // ...

    return $image;
});

回答by Asraf Ud Duha

You need to use the save() method of the Image class where you will specify the quality of the image. The actual signature of the method save() is:

您需要使用 Image 类的 save() 方法,您将在其中指定图像的质量。save() 方法的实际签名是:

save([string $path, [int $quality], [string $format]])

Sample Examples are as follows:

示例示例如下:

<br>
// open an image file<br>
$img = Image::make('public/foo.jpg');
<br>
<br>

// save file as jpg with medium quality<br>
$img->save('public/bar.jpg', 60); <br><br>

// save the same file as jpg with default quality<br>
$img->save('public/baz.jpg');<br><br>

// save the file in png format with good quality<br>
$img->save('public/bar.png', 75);<br><br>

// save the image jpg format defined by third parameter<br>
$img->save('public/foo', 80, 'jpg');
<br><br>

For more information, please take a look at http://image.intervention.io/api/save

有关更多信息,请查看http://image.intervention.io/api/save