Я использую функцию GD, чтобы изменить размер моих фотографий.Моя проблема в том, что создается только черное изображение, в то время как если я изменю расширение того же изображения и изменит PNG на jpg, это будет работать хорошо.Я протестировал другие изображения PNG, некоторые из изображений были хорошо изменены.Как вы думаете, где может быть проблема?
Мои коды:
<?php
function getImageRatio($sourcePath){
list($width, $height) = getimagesize($sourcePath);
$ratio = $height / $width;
return $ratio;
}
function resizeImage($sourcePath, $newWidth, $newHeight, $destination = null) {
$parts = explode(".", $sourcePath);
$ext = $parts[count($parts)-1];
if ($ext == 'jpg' || $ext == 'jpeg'){
$format = 'jpg';
} else {
$format = 'png';
}
if ($format == 'jpg') {
$sourceImage = imagecreatefromjpeg($sourcePath);
}
if ($format == 'png') {
$sourceImage = imagecreatefrompng($sourcePath);
}
list($srcWidth, $srcHeight) = getimagesize($sourcePath);
$ratio = getImageRatio($sourcePath);
if ($newHeight == 0){
$newHeight = floor($newWidth * $ratio);
}
if ($newWidth == 0){
$newWidth = floor($newHeight / $ratio);
}
$destinationImage = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($destinationImage, $sourceImage, 0, 0, 0, 0, $newWidth, $newHeight, $srcWidth, $srcHeight);
if ($destination == null){
header('Content-Type: image/jpeg');
if ($format == 'jpg') {
imagejpeg($destinationImage, null, 100);
}
if ($format == 'png') {
imagepng($destinationImage);
}
} else {
if ($format == 'jpg') {
imagejpeg($destinationImage, $destination, 100);
}
if ($format == 'png') {
imagepng($destinationImage, $destination);
}
}
}
И поэтому я их использую:
public function process($imageName, $size) {
$sizeArray = explode("*", $size);
$originalPath = rootUrl() . "/image/" . $imageName . ".png";
$thumbPath = getcwd() . "/image/" . $imageName . "_" . $size . ".png";
resizeImage($originalPath, $sizeArray[0], 0, $thumbPath);
}