我正在使用一个简单的图像优化器工作,但是我有一个问题,我使用make打开图像,获取文件大小并给我正确的值,然后尝试使用其他名称保存并使用不同的质量,从而降低了直到文件大小小于100的质量一一对应。但是问题是文件大小永远不会改变:
if ($data['picture'][$key]['weight'] >= 100) {
if (@copy(public_path() . '/photos/' . $images['path'], public_path() . '/photos/temp/'. $images['path'])) {
$img = Image::make(public_path() . '/photos/temp/'. $images['path']);
$height = $img->height();
$width = $img->width();
if ($height > 600) {
$img->resize(null, 600, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
}
$height = $img->height();
$width = $img->width();
if ($width > 800) {
$img->resize(800, null, function ($constraint) {
$constraint->aspectRatio();
$constraint->upsize();
});
}
$height = $img->height();
$width = $img->width();
$size = $img->filesize() / 1000;
$quality = 100;
这时我得到了正确的文件大小,但是现在,如果我销毁了图像,然后再次使用make,则会损坏图像;如果再次简单地使用make进行打开,则图像也会损坏。然后,给我原始大小:
while ($size > 100) {
$img->save(public_path() . '/photos/temp/' . $images['path'])->encode('jpg', $quality)->filesize() / 1000;
dump($img->filesize());
if ($size <= 100) {
break;
} else {
$quality--;
}
if ($quality < 80) {
$size = 100;
break;
}
};
$data['photos'][$key]['temporal'] = '/photos/temp' . $images['path'];
}
}