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);
Другие вопросы по тегам