Я уже упоминал ниже, что есть ответ в stackoverflow, но это не сработало для меня, потому что этот ответ похож на imagecreatetruecolor($width, $height)
, но в моем коде у меня нет ширины и высоты. Мой код совершенно другой. Пожалуйста, удалите этот повторяющийся тег.
Я пытаюсь сжать изображение во время загрузки, оно отлично сжимается для jpg
изображений, но когда я загружаю png transparent
изображение, оно сохраняется с черным фоном, я много гуглил но не нашел идеального решения по моему коду. Был ответ imagecreatetruecolor($width, $height)
, но в моем коде нет width and height variables
, я полностью запутался и застрял.
Вот мой код функции:
public function updateProfilePic($file, $userid) {
$filename = $file['user_img']['name'];
$filetmp = $file['user_img']['tmp_name'];
$valid_ext = array('png', 'jpeg', 'jpg');
$location = "user/profilepic/" . $filename;
$file_extension = pathinfo($location, PATHINFO_EXTENSION);
$file_extensionstr = strtolower($file_extension);
if(!empty($filename)){
if (in_array($file_extensionstr, $valid_ext)) {
$this->compressImage($filetmp, $location, 50);
// Here I am trying to compress image
return $this->updateProfilePicture($filename, $userid);
} else {
$msg = 'Invalid file type. You can upload only:-' . implode(', ', $valid_ext) . '';
return $msg;
}
} else {
$msg = 'Please upload your profile picture.';
return $msg;
}
}
public function compressImage($source, $destination, $quality) {
$info = getimagesize($source);
if ($info['mime'] == 'image/jpeg'){
$image = imagecreatefromjpeg($source);
} elseif ($info['mime'] == 'image/png'){
$image = imagecreatefrompng($source);
}
imagejpeg($image, $destination, $quality);
}
Обновленный код того, что вы говорили:
public function compressImage($source, $destination, $quality) {
$info = getimagesize($source);
$width_new = $info[0];
$height_new = $info[1];
$dimg = imagecreatetruecolor($width_new, $height_new);
$background = imagecolorallocate($dimg , 0, 0, 0);
imagecolortransparent($dimg, $background);
imagealphablending($dimg, false);
imagesavealpha($dimg, true);
if ($info['mime'] == 'image/jpeg'){
$image = imagecreatefromjpeg($source);
} elseif ($info['mime'] == 'image/png'){
$image = imagecreatefrompng($source);
}
imagejpeg($image, $destination, $quality);
}
Пожалуйста, сначала проверьте мой код, а затем сообщите мне решение. Пожалуйста, помогите мне