GD функция создания черного изображения - PullRequest
0 голосов
/ 04 мая 2019

Я использую функцию 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);
  }
...