php img 缩略图未调整大小
php img thumbs are not resized
我有代码可以从用户的原始图像中制作大拇指。我需要拇指的硬核宽度和高度,它是 160 x 160。我的问题不是完美的图片。我的意思是,当用户想要添加 img 时,它的宽度大于高度,那么我的缩略图看起来很糟糕并且被拉伸了 - 当原始 img 高于宽度时会发生类似的情况 - 然后拇指被严重压缩。我认为我必须使用函数 imagecopyresampled() 进行操作,但我认为这是一个糟糕的选择。我的问题是:如何使拇指不被压缩或拉伸并切割它们f.e。从原始图像的中心?
我的代码现在看起来像这样:
$imgOrginalsize = getimagesize($file);
$ratio = $imgOrginalsize[0] / $imgOrginalsize[1];
$h = 160;
$w = 160;
$file_name = basename($file);
switch (strtolower($imgOrginalsize['mime'])) {
case 'image/jpeg':
$img = imagecreatefromjpeg($file);
$new = imagecreatetruecolor($w, $h);
imagecopyresampled($new, $img, 0, 0, 0, 0, $w, $h, $imgOrginalsize[0], $imgOrginalsize[1]);
imagejpeg($new, $pathToSave . $file_name, 100);
imagedestroy($new);
break;
case 'image/png':
$img = imagecreatefrompng($file);
$new = imagecreatetruecolor($w, $h);
imagecopyresampled($new, $img, 0, 0, 0, 0, $w, $h, $imgOrginalsize[0], $imgOrginalsize[1]);
imagepng($new, $pathToSave . $file_name, 100);
imagedestroy($new);
break;
default:
var_dump('error default');
exit();
}
现在拇指看起来很糟糕,例如被压缩了 - 原始 img 高得多你知道我的意思我不需要缩略图所有图片 - 我可以从左上角(或从原始 img 的中心)裁剪) 但我不想压缩或拉伸它:
试试 imagecrop($img, ['x' => 0, 'y' => 0, 'width' => $size, 'height' => $size ] );
见http://php.net/manual/en/function.imagecrop.php
将 $size 替换为您想要的 width/height
link 也有一个如何居中的例子。
我有代码可以从用户的原始图像中制作大拇指。我需要拇指的硬核宽度和高度,它是 160 x 160。我的问题不是完美的图片。我的意思是,当用户想要添加 img 时,它的宽度大于高度,那么我的缩略图看起来很糟糕并且被拉伸了 - 当原始 img 高于宽度时会发生类似的情况 - 然后拇指被严重压缩。我认为我必须使用函数 imagecopyresampled() 进行操作,但我认为这是一个糟糕的选择。我的问题是:如何使拇指不被压缩或拉伸并切割它们f.e。从原始图像的中心? 我的代码现在看起来像这样:
$imgOrginalsize = getimagesize($file);
$ratio = $imgOrginalsize[0] / $imgOrginalsize[1];
$h = 160;
$w = 160;
$file_name = basename($file);
switch (strtolower($imgOrginalsize['mime'])) {
case 'image/jpeg':
$img = imagecreatefromjpeg($file);
$new = imagecreatetruecolor($w, $h);
imagecopyresampled($new, $img, 0, 0, 0, 0, $w, $h, $imgOrginalsize[0], $imgOrginalsize[1]);
imagejpeg($new, $pathToSave . $file_name, 100);
imagedestroy($new);
break;
case 'image/png':
$img = imagecreatefrompng($file);
$new = imagecreatetruecolor($w, $h);
imagecopyresampled($new, $img, 0, 0, 0, 0, $w, $h, $imgOrginalsize[0], $imgOrginalsize[1]);
imagepng($new, $pathToSave . $file_name, 100);
imagedestroy($new);
break;
default:
var_dump('error default');
exit();
}
现在拇指看起来很糟糕,例如被压缩了 - 原始 img 高得多你知道我的意思我不需要缩略图所有图片 - 我可以从左上角(或从原始 img 的中心)裁剪) 但我不想压缩或拉伸它:
试试 imagecrop($img, ['x' => 0, 'y' => 0, 'width' => $size, 'height' => $size ] );
见http://php.net/manual/en/function.imagecrop.php
将 $size 替换为您想要的 width/height
link 也有一个如何居中的例子。