JavaScript — загрузка изображений PHP: прозрачность отображается в виде черного

Я очень плохо знаком с PHP и не очень понимаю, как исправить распространенную ошибку. Когда я загружаю png, используя следующий код, фон отображается черным. Существуют некоторые решения, которые показывают, как это исправить, но я не знаю, где поместить это в код, и все, что я нахожу, нарушает его. Я использую этот код:

<?php
############ Configuration ##############
$destination_folder     = '../img/'; //upload directory ends with / (slash)
##########################################

//continue only if $_POST is set and it is a Ajax request
if(isset($_POST) && isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){


$whichimage = $_POST["whichimage"];

// check $_FILES['ImageFile'] not empty
if(!isset($_FILES['image_file']) || !is_uploaded_file($_FILES['image_file']['tmp_name'])){
die('Image file is Missing!'); // output error when above checks fail.
}

//uploaded file info we need to proceed
$image_name = $_FILES['image_file']['name']; //file name
$image_temp = $_FILES['image_file']['tmp_name']; //file temp

$image_size_info    = getimagesize($image_temp); //get image size

if($image_size_info){
$image_type         = $image_size_info['mime']; //image type
}else{
die("Make sure image file is valid!");
}

//switch statement below checks allowed image type
//as well as creates new image from given file
switch($image_type){
case 'image/png':
$image_res =  imagecreatefrompng($image_temp); break;
case 'image/gif':
$image_res =  imagecreatefromgif($image_temp); break;
case 'image/jpeg': case 'image/pjpeg':
$image_res = imagecreatefromjpeg($image_temp); break;
default:
$image_res = false;
}

if($image_res){
//Get file extension and name to construct new file name
$image_info = pathinfo($image_name);
$image_extension = strtolower($image_info["extension"]); //image extension
$image_name_only = strtolower($image_info["filename"]);//file name only, no extension

//create a name for new image (Eg: fileName_293749.jpg) ;
$new_file_name = $whichimage . '.' . $image_extension;

//folder path to save resized images and thumbnails

$image_save_folder  = $destination_folder . $new_file_name;

//call normal_resize_image() function to proportionally resize image
if(normal_resize_image($image_res, $image_save_folder, $image_type))
{

}

imagedestroy($image_res); //freeup memory
}
}

#####  This function will proportionally resize image #####
function normal_resize_image($source, $destination, $image_type){

//do not resize if image is smaller than max size
if(save_image($source, $destination, $image_type)){
return true;
}


}

##### Saves image resource to file #####
function save_image($source, $destination, $image_type){
switch(strtolower($image_type)){//determine mime type
case 'image/png':
imagepng($source, $destination); return true; //save png file
break;
case 'image/gif':
imagegif($source, $destination); return true; //save gif file
break;
case 'image/jpeg': case 'image/pjpeg':
imagejpeg($source, $destination); return true; //save jpeg file
break;
default: return false;
}
}

Это модифицированная и урезанная версия из этого урока

Я не хочу изменять размер изображений и менять качество, поэтому я попытался удалить эти части кода.

В разделе комментариев учебника есть несколько постов об исправлении прозрачности с помощью этого:

imagealphablending($NewCanves, false);
imagesavealpha($NewCanves,true);
$transparent = imagecolorallocatealpha($NewCanves, 255, 255, 255, 127);
imagefilledrectangle($NewCanves, 0, 0, $NewWidth, $NewHeight, $transparent);

Но проблема в том, что эти фрагменты попадают в раздел изменения размера удаленного изображения.

Как правильно исправить проблемы с прозрачностью моего модифицированного кода?
Спасибо за чтение и помощь нубу PHP.

0

Решение

Я понял это после перерыва и чувствовал себя действительно глупым! Еще раз спасибо Марку Б за ваши мысли. Решение, которое я выбрал, было следующим:

Добавляем следующие строки:

imagealphablending($image_res, false);
imagesavealpha($image_res, true);

К этой части кода:

//switch statement below checks allowed image type
//as well as creates new image from given file
switch($image_type){
case 'image/png':
$image_res =  imagecreatefrompng($image_temp); imagealphablending($image_res, false);
imagesavealpha($image_res, true); break;
case 'image/gif':
$image_res =  imagecreatefromgif($image_temp); break;
case 'image/jpeg': case 'image/pjpeg':
$image_res = imagecreatefromjpeg($image_temp); break;
default:
$image_res = false;
}
0

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

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

По вопросам рекламы [email protected]