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
Laravel image intervention compression
提问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 format
and the quality
(for jpg
). So, everytime you use the cache, try to do this:
尝试该encode()
方法,您可以在其中指定format
和quality
(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