Ошибка при создании миниатюр только для некоторых изображений с использованием php - PullRequest
0 голосов
/ 10 апреля 2019

Я получил ошибку при загрузке нескольких изображений с использованием php7.2-fpm и сервера apache2 в серверной части, это всего лишь несколько изображений среди множества изображений, поэтому я хотел бы знать, если в моем коде что-то не так,или в чем реальная проблема для этого.Это код, ответственный за ошибки:

function compress_image($source_url, $destination_url, $quality) {

        $info = getimagesize($source_url);

        if ($info['mime'] == 'image/jpeg')
              $image = imagecreatefromjpeg($source_url);

        else if ($info['mime'] == 'image/gif')
              $image = imagecreatefromgif($source_url);

        else if ($info['mime'] == 'image/png')
              $image = imagecreatefrompng($source_url);

        imagejpeg($image, $destination_url, $quality);
        return $destination_url;
    }

    //Create Thumb Image
    function create_thumb_image($target_folder ='',$thumb_folder = '', $thumb_width = '',$thumb_height = '') {  
     //folder path setup
         $target_path = $target_folder;
         $thumb_path = $thumb_folder;  

         $thumbnail = $thumb_path;
         $upload_image = $target_path;

            list($width,$height) = getimagesize($upload_image);
            $thumb_create = imagecreatetruecolor($thumb_width,$thumb_height);
            switch($file_ext) {
                case 'jpg':
                    $source = imagecreatefromjpeg($upload_image);
                    break;
                case 'jpeg':
                    $source = imagecreatefromjpeg($upload_image);
                    break;
                case 'png':
                    $source = imagecreatefrompng($upload_image);
                    break;
                case 'gif':
                    $source = imagecreatefromgif($upload_image);
                     break;
                default:
                    $source = imagecreatefromjpeg($upload_image);
            }
       imagecopyresized($thumb_create, $source, 0, 0, 0, 0, $thumb_width, $thumb_height, $width,$height);
            switch($file_ext){
                case 'jpg' || 'jpeg':
                    imagejpeg($thumb_create,$thumbnail,80);
                    break;
                case 'png':
                    imagepng($thumb_create,$thumbnail,80);
                    break;
                case 'gif':
                    imagegif($thumb_create,$thumbnail,80);
                     break;
                default:
                    imagejpeg($thumb_create,$thumbnail,80);
            }
    }

, и вот подсказка об ошибках, которые я получил в файле error.log

fcm.php в строке 157 \ nPHP message:Уведомление PHP: неопределенная переменная: file_ext в файле fcm.php в строке 160 \ nPHP сообщение: Уведомление PHP: неопределенная переменная: file_ext fcm.php в строке 137 \ nPHP сообщение: уведомление PHP: неопределенная переменная: file_ext

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

1 Ответ

0 голосов
/ 12 июня 2019

Вы можете использовать следующий код для создания миниатюры изображения без изменения соотношения сторон исходного изображения.А здесь $ img - это путь к изображению, где хранится исходное изображение.

            $sourceAppImgPath = $this->images->absPath($img);
            $file_dimensions = getimagesize($sourceAppImgPath);
            $ImageType = strtolower($file_dimensions['mime']);

                switch(strtolower($ImageType))
                {
                    case 'image/png':
                        $image = imagecreatefrompng($sourceAppImgPath);
                        break;
                    case 'image/gif':
                        $image = imagecreatefromgif($sourceAppImgPath);
                        break;
                    case 'image/jpeg':
                        $image = imagecreatefromjpeg($sourceAppImgPath);
                        break;
                    default:
                        return false; //output error
                }

                    $origWidth = imagesx($image);
                    $origHeight = imagesy($image);
                    $maxWidth = 300;
                    $maxHeight =300;

                    if ($maxWidth == 0)
                        $maxWidth  = $origWidth;

                    if ($maxHeight == 0)
                        $maxHeight = $origHeight;

                    $widthRatio = $maxWidth / $origWidth;
                    $heightRatio = $maxHeight / $origHeight;
                    $ratio = min($widthRatio, $heightRatio);
                    $thumb_width  = (int)$origWidth  * $ratio;
                    $thumb_height = (int)$origHeight * $ratio;
...