0

我正在处理图像上传并使用 PHP 将文件保存在服务器上。我想将图像大小调整为 256px x 256px,我正在使用以下代码,但最终图像不是 256px x 256px 有人可以提供任何建议吗?

 $promo_image = $_FILES['promo_image']['name'];

 if($promo_image != "") {
   $ext = pathinfo($promo_image, PATHINFO_EXTENSION);
   $promolink = "uploads/Image/".uniqId().uniqId().uniqId().".".$ext;

   list($width, $height) = getimagesize($_FILES['promo_image']['tmp_name']);
   if(strtolower($ext) == "png")
     $original = imagecreatefrompng($_FILES['promo_image']['tmp_name']);
     else
     $original = imagecreatefromjpeg($_FILES['promo_image']['tmp_name']);

   $resized = imagecreatetruecolor(256,256);
   imagecopyresampled($resized, $original, 0, 0, 0, 0,256 ,256, $width, $height);
   if(strtolower($ext) == "png")
     imagepng($resized, $promolink);
     else
     imagejpeg($resized, $promolink);
   move_uploaded_file($_FILES['promo_image']['tmp_name'], $promolink);
   }
4

2 回答 2

0

这是最终对我有用的东西......

   <?php
    $uploadedFile = $_FILES['promo_image']['tmp_name'];
    $sourceProperties = getimagesize($uploadedFile);
    $newFileName = time();
    $dirPath = "uploads/Image/";
    $ext = pathinfo($_FILES['promo_image']['name'], PATHINFO_EXTENSION);
    $imageType = $sourceProperties[2];


    switch ($imageType) {


        case IMAGETYPE_PNG:
            $imageSrc = imagecreatefrompng($uploadedFile);
            $tmp = imageResize($imageSrc,$sourceProperties[0],$sourceProperties[1]);
            imagepng($tmp,$dirPath. $newFileName. "_promo.". $ext);
            break;

        case IMAGETYPE_JPEG:
            $imageSrc = imagecreatefromjpeg($uploadedFile);
            $tmp = imageResize($imageSrc,$sourceProperties[0],$sourceProperties[1]);
            imagejpeg($tmp,$dirPath. $newFileName. "_promo.". $ext);
            break;

        case IMAGETYPE_GIF:
            $imageSrc = imagecreatefromgif($uploadedFile);
            $tmp = imageResize($imageSrc,$sourceProperties[0],$sourceProperties[1]);
            imagegif($tmp,$dirPath. $newFileName. "_promo.". $ext);
            break;

        default:
            echo "Invalid Image type.";
            exit;
            break;
    }


    move_uploaded_file($uploadedFile, $dirPath. $newFileName. ".". $ext); 

    echo "Image Resize Successfully.";

 }

function imageResize($imageSrc,$imageWidth,$imageHeight) {

$newImageWidth =256;
$newImageHeight =256;

$newImageLayer=imagecreatetruecolor($newImageWidth,$newImageHeight);
imagecopyresampled($newImageLayer,$imageSrc,0,0,0,0,$newImageWidth,$newImageHeight,$imageWidth,$imageHeight);

return $newImageLayer;
}

 ?>
于 2021-08-28T15:39:31.950 回答
0

下面分享我使用和测试过太多次的代码。

    function ResizeImage($file_name, $newWidth, $newHeight) {
        if($file_name!="") {
            $ar=getimagesize($file_name);

            if($ar[2] == 2) $srcImage = ImageCreateFromJPEG( $file_name );      /*-- "JPG" --*/
            if($ar[2] == 1) $srcImage = ImageCreateFromGIF( $file_name );     /*-- "GIF" --*/

            $srcWidth   = ImageSX( $srcImage );
            $srcHeight  = ImageSY( $srcImage );

            $destWidth  = $newWidth;
            $destHeight = $newHeight;
            $destImage  = imagecreatetruecolor( $destWidth, $destHeight);

            ImageCopyResampled( $destImage, $srcImage, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight);

            if($ar[2] == 1) ImageGif($destImage,$file_name);            /*-- "GIF" --*/
            if($ar[2] == 2) ImageJpeg($destImage,$file_name,70);    /*-- "JPG" --*/
        }
    }
于 2021-08-26T14:00:24.367 回答