Миниатюра PHP с белым фоном и не централизовано

У меня есть следующий скрипт 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



}

}
}
}

0

Решение

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

//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);

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

0

Другие решения

Других решений пока нет …