我正在使用PHP将图像(对于用户的个人资料图标)调整为200x200大小,因此我不会用巨大的图像填充我的页面。但是,如果不是正方形,我的代码似乎会删除任何不在图像左上角的内容。我怎么才能正常调整到200x200?这是我的代码:
<?php
//Function that will create a thumbnail of images submitted
function createThumbnail($image_name, $thumbnail_name, $size, $type) {
//creates the image based on the type of file
if($type == "image/jpeg") {
$image = imagecreatefromjpeg($image_name);
}
else if ($type == "image/png") {
$image = imagecreatefrompng($image_name);
}
else if ($type == "image/gif") {
$image = imagecreatefromgif($image_name);
}
$thumbnail = imagecreatetruecolor($size, $size);
// if height and width are not equal...
if(imagesx($image) > imagesy($image)){
imagecopyresized($thumbnail, $image, 0, 0, 0, 0, 200, 200, imagesy($image), imagesy($image));
}
else {
imagecopyresized($thumbnail, $image, 0, 0, 0, 0, 200, 200, imagesx($image), imagesx($image));
}
if($type == "image/jpeg") {
imagejpeg($thumbnail, $thumbnail_name, 100);
}
else if ($type == "image/png") {
imagepng($thumbnail, $thumbnail_name, 0);
}
else if ($type == "image/gif") {
imagegif($thumbnail, $thumbnail_name);
}
}
?>
谢谢你们! - 亚当
答案 0 :(得分:1)
获取图像大小数据
$imageData = @getimagesize($image);
计算比率
$ratio = min(200/$imageData[0],200/$imageData[1],1);
计算新的宽度和高度
$width = (INT) round($ratio * $imageData[0]);
$height = (INT) round($ratio * $imageData[1]);
因此调整大小代码如下
imagecopyresampled($thumbnail, $image, 0, 0, 0, 0, $width, $height,$imageData[0], $imageData[1])
如果比例为1则没有问题,但如果比率小于1,我们得到的宽度/高度图像要比要求的要少,即200 * 200。
为此,您可以创建一个新的透明png或白色(200 * 200)jpg,并且可以适当地放置新生成的图像,即如果高度较小,则将其垂直居中放置,或者如果宽度较小,则将其水平居中放置并保存该文件
可以使用此链接中发布的类似方法完成此操作:http://php.net/manual/en/image.examples-watermark.php
来源:http://xlab.co.in/resize-an-image-without-crop-using-php/