如何让PHP不能裁剪到我调整大小的左上角?

时间:2014-09-16 20:09:28

标签: php

我正在使用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); 
                }
}
    ?>

谢谢你们! - 亚当

1 个答案:

答案 0 :(得分:1)

获取图像大小数据

$imageData = @getimagesize($image);

计算比率

  1. 如果图像宽度和高度都小于200,我们可以继续使用相同的尺寸。
  2. 如果宽度和宽度中的任何一个或两个    高度大于200我们需要计算新的宽度和    高度乘以比率200 / max(宽度,高度),依次    避免裁剪顶部(如果宽度更大)或左侧(如果高度为)    更多)通过保持纵横比。
  3. $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/