7

在我的 Laravel 网络应用程序中,我使用了Intervention Image library。我正在保存上传图像的三个版本:'original''500_auto'自定义大小的图像。

$image = Image::make(Input::file('file');

// Save the orignal image
$image->save($folder . 'original.' . $extension);

// Save 500_auto image
$image->resize(500, null, function($constraint) {
    $constraint->aspectRatio();
});
$image->save($folder . '500_auto.' . $extension, 100);

// Check if size is set
if (isset($config->images->width) && isset($config->images->height)) {
    // Assign values
    $width  = $config->images->width;
    $height = $config->images->height;
    // Create the custom thumb
    $image->resize($width, $height, function($constraint) {
        $constraint->aspectRatio();
    });
    $image->save($folder . $width . '_' . $height . '.' . $extension, 100);
}

干预的驱动程序在配置中设置为'gd'

'driver' => 'gd'

这是我上传的图片:original.jpg

原始图像

这是自定义拇指的结果,其配置设置设置为精确的原始尺寸(1800 x 586):1800_586.jpg

调整大小的图像

如您所见,在调整大小的图像中存在很多质量损失。我怎样才能解决这个问题?

4

2 回答 2

15

您首先将图像大小调整为小格式,然后拍摄小图像并再次将其调整为原始大小。如果您颠倒顺序,您将从原始尺寸 -> 原始尺寸 -> 小尺寸改为。

就个人而言,我通常更喜欢为每张新图像重做Image::make()调用,以确保我不会在此过程中搞砸这样的事情。

于 2015-12-18T10:41:24.777 回答
10

您可以使用“backup()”方法保存对象的状态和“reset()”方法返回备份状态:

// create an image
$img = Image::make('public/foo.jpg');

// backup status
$img->backup();

// perform some modifications
$img->resize(320, 240);
$img->invert();
$img->save('public/small.jpg');

// reset image (return to backup state)
$img->reset();

// perform other modifications
$img->resize(640, 480);
$img->invert();
$img->save('public/large.jpg');

此页面上的更多信息:http: //image.intervention.io/api/reset

于 2017-08-17T18:43:16.357 回答