php gd:当我通过php裁剪图像时,一些图像出来了

时间:2009-09-30 17:29:31

标签: php gd

这是我正在谈论的网站 http://makeupbyarpi.com/portfolio.php

你会发现有些图像是按宽度方式进行的。

我使用的代码是:

$width="500";
$height="636";


 $img_src = $_FILES['galleryimg']['tmp_name'];
 $thumb = "../gallery/".rand(0,100000).".jpg";


 //Create image stream 
 $image = imagecreatefromjpeg($img_src);

 //Gather and store the width and height
 list($image_width, $image_height) = getimagesize($img_src);


 //Resample/resize the image 
 $tmp_img = imagecreatetruecolor($width, $height);
 imagecopyresampled($tmp_img, $image, 0, 0, 0, 0, $width, $height, $image_width, $image_height);

 //Attempt to save the new thumbnail 
 if(is_writeable(dirname($thumb))){
  imagejpeg($tmp_img, $thumb, 100);

 }

 //Free memory 
 imagedestroy($tmp_img);
 imagedestroy($image);

上传的图像很大,有时是3000像素×2000像素,我将它裁剪为500 x 536,并且一些基于风景的图像变得模糊。是否有一个公式,我可以用来仔细裁剪,以便图像出来好?

感谢

1 个答案:

答案 0 :(得分:2)

如果需要,您可以调整大小并添加letterbox。您只需要调整宽度,然后计算新的高度(假设宽高比与原始高度相同),如果高度不等于您需要绘制黑色矩形(封面背景)的首选高度,然后居中图像。

你也可以做一个邮筒,但你做的与上面完全相同,只是宽度变为高度,高度变为宽度。

编辑:实际上,你调整最大的那个,如果宽度更大,你调整大小,如果高度更大,那么你调整大小。根据您调整的大小,您的脚本应该是letterbox或pillarbox。

编辑2:

<?php
    // Define image to resize   
    $img_src = $_FILES['galleryimg']['tmp_name'];
    $thumb = "../gallery/" . rand(0,100000) . ".jpg";

    // Define resize width and height
    $width = 500;
    $height = 636;

    // Open image
    $img = imagecreatefromjpeg($img_src);

    // Store image width and height
    list($img_width, $img_height) = getimagesize($img_src);

    // Create the new image
    $new_img = imagecreatetruecolor($width, $height);

    // Calculate stuff and resize image accordingly
    if (($width/$img_width) < ($height/$img_height)) {
        $new_width = $width;
        $new_height = ($width/$img_width) * $img_height;
        $new_x = 0;
        $new_y = ($height - $new_height) / 2;
    } else {
        $new_width = ($height/$img_height) * $img_width;
        $new_height = $height;
        $new_x = ($width - $new_width) / 2;
        $new_y = 0;
    }

    imagecopyresampled($new_img, $img, $new_x, $new_y, 0, 0, $new_width, $new_height, $img_width, $img_height);

    // Save thumbnail
    if (is_writeable(dirname($thumb))) {
        imagejpeg($new_img, $thumb, 100);
    }

    // Free up resources
    imagedestroy($new_img);
    imagedestroy($img);
?>

很抱歉这花了一段时间,我在计算部分遇到了一个小错误,我无法解决这个问题,比如10分钟= /这应该有用。