Миниатюра PHP с белым фоном и не централизовано - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть следующий скрипт php для создания эскиза после загрузки изображения.Он работает нормально, но создает черный фон и не центрирует изображение, если оно не того размера, который вы хотите, кто-нибудь знает, как оставить белый фон и отцентрировать его?

Как это исправить https://imgur.com/a/uTrPadZ

if($_SERVER['REQUEST_METHOD']=='POST')
{
$filetmp = $_FILES["image"]["tmp_name"];
$filename = $_FILES["image"]["name"];
$filetype = $_FILES["image"]["type"];
$filesize = $_FILES["image"]["size"];
$fileinfo = getimagesize($_FILES["image"]["tmp_name"]);
$filewidth = $fileinfo[0];
$fileheight = $fileinfo[1];
$filepath = "../uploads/";
$filepath_thumb = "../thumbnail/";

if($filetmp == "")
{
    echo "please select a photo";
}
else
{

    if($filesize > 2097152)
    {
        echo "photo > 2mb";
    }
    else
    {

        if($filetype != "image/jpeg" && $filetype != "image/png" && $filetype != "image/gif")
        {
            echo "Please upload jpg / png / gif";
        }
        else
        {
            $final_image = rand(1000,1000000).$filename;
            $filepath = $filepath.strtolower($final_image);
            move_uploaded_file($filetmp,$filepath);             

            if($filetype == "image/jpeg")
            {
              $imagecreate = "imagecreatefromjpeg";
              $imageformat = "imagejpeg";
            }
            if($filetype == "image/png")
            {                        
              $imagecreate = "imagecreatefrompng";
              $imageformat = "imagepng";
            }
            if($filetype == "image/gif")
            {                        
              $imagecreate= "imagecreatefromgif";
              $imageformat = "imagegif";
            }

            $new_width = "200";
            $new_height = "200";


            $filepath_thumb = $filepath_thumb.strtolower($final_image);
            $image_p = imagecreatetruecolor($new_width, $new_height);
            $image = $imagecreate($filepath); //photo folder
            if($filewidth > $fileheight) 
            {
                $thumb_w    =   $new_width;
                $thumb_h    =   $fileheight*($new_height/$filewidth);
            }

            if($filewidth < $fileheight) 
            {
                $thumb_w    =   $filewidth*($new_width/$fileheight);
                $thumb_h    =   $new_height;
            }

            if($filewidth == $fileheight) 
            {
                $thumb_w    =   $new_width;
                $thumb_h    =   $new_height;
            }

            $dst_img        =   ImageCreateTrueColor($thumb_w,$thumb_h);

            imagecopyresampled($image_p,$image,0,0,0,0,$thumb_w,$thumb_h,$filewidth,$fileheight);

            $imageformat($image_p, $filepath_thumb);//thumb folder      



        }

    }
}
}

1 Ответ

0 голосов
/ 20 декабря 2018

Черный фон по умолчанию, вам просто нужно сначала установить цвет фона нового изображения на белый.

//set background colour white before copying
$white = imagecolorallocate($image_p, 255, 255, 255);
imagefill($image_p, 0, 0, $white);

imagecopyresampled($image_p,$image,0,0,0,0,$thumb_w,$thumb_h,$filewidth,$fileheight);

$imageformat($image_p, $filepath_thumb);//thumb folder

Кроме того, $ dst_img, похоже, не используется.

Центрирование (непроверенная, но достаточно простая математика):

$xOffset = (imagesx($p_image)-$thumb_w) / 2;
$yOffset = (imagesy($p_image)-$thumb_h) / 2;

imagecopyresampled($image_p,$image,$offsetX,$offsetY,0,0,$thumb_w,$thumb_h,$filewidth,$fileheight);

Если вы знаете, какое измерение не соответствует новому измерению миниатюр, это можно упростить.

...