imagecreatefrompng не всегда работает на одном изображении
Это немного странно. Пользователи могут загрузить изображение на сервер, вставить некоторый текст, а затем со стороны сервера я создаю новое изображение с текстом пользователя и загруженным изображением.
Для создания нового изображения я использую imagecreatefrompng
или же jpg
в зависимости от типа загружаемого файла.
Если пользователю не нравится созданное изображение, он может отредактировать текст или загрузить другое изображение и снова нажать "Отправить".
Это все работает как надо, за исключением одного случая. Когда пользователь загружает png
файл новое изображение создается, НО, если пользователь решает изменить некоторый текст и иметь тот же png
файл я получаю это предупреждение:
Warning: imagecreatefrompng(): '..path.../temp/1404381132_my_png.png' is not a valid PNG file in ...path\save_image.php
Что немного странно, если один и тот же образ работал в первый раз, почему он не работает во второй раз?
Я проверял то же самое на jpgs
и проблем не было.
Просто чтобы дать вам представление о некоторых тестовых случаях:
Тестовый пример 1
Пользовательский текст 1: abc
Пользовательский текст 2: abc
Образ: img.jpg
Изображение создано, ошибок нет
Пользователь решает изменить текст, но имеет то же изображение:
Пользовательский текст 1: abcdef
Пользовательский текст 2: abcdef
Изображение создано, ошибок нет
Пользователь решает изменить изображение
Образ: img_2.jpg
или же img_2.png
Изображение создано, ошибок нет
Тестовый пример 2
Пользовательский текст 1: abc
Пользовательский текст 2: abc
Образ: img.png
Изображение создано, ошибок нет
Пользователь решает изменить текст, но имеет то же изображение:
Пользовательский текст 1: abcdef
Пользовательский текст 2: abcdef
Warning image is not a valid PNG
ошибка
Тестовый пример 3
Пользовательский текст 1: abc
Пользовательский текст 2: abc
Образ: img.png
Изображение создано, ошибок нет
Пользователь решает изменить изображение:
Образ: img_2.jpg
или же img_2.png
Изображение создано, ошибок нет
Я думаю, что это слишком конкретное, не уверен, что кто-нибудь может решить это.
1 ответ
Это может быть из-за прозрачности и способа работы с PNG. У меня было это несколько раз, когда я работал с причинами проблем PNG. Я всегда разрешал это путем создания еще одного PNG из файла загрузки и работы с файлом THAT, а не с загруженным файлом:
$uploaded = imagecreatefrompng('uploaded.png');
// Create a template canvas
$template = imagecreatetruecolor(imagesx($uploaded), imagesy($uploaded));
// Copy the uploaded image onto the canvas, keeping same height and width
imagecopyresampled($template, $uploaded, 0, 0, 0, 0, imagesx($uploaded), imagesy($uploaded), imagesx($uploaded), imagesy($uploaded));
// Save it and work on this one
imagepng($template, 'workingfile.png');
imagedestroy($template);