Преобразование BMP в JPG на PHP

На сайте, который я разрабатываю, мне нужно иметь возможность передавать все мои изображения через imagejpeg(), поэтому я решил (поскольку мой сайт принимает только загрузки JPG, BMP + PNG) просто сначала конвертировать BMP и PNG в JPG.

Теперь для преобразования BMP я использовал скрипт, найденный здесь: http://forums.codewalkers.com/php-coding-7/how-to-convert-bmp-to-jpg-879135.html

Скрипт отлично работает, когда я пропускаю через него обычный BMP.

Теперь у меня был PNG, который у меня были проблемы с преобразованием с помощью imagecreatefrompng(), и через некоторое время я понял, что у него есть mime-тип image/x-ms-bmp....

Я попытался передать изображение через скрипт BMP, но получаю следующую ошибку:

Предупреждение: imagecreatefromgd() [function.imagecreatefromgd]: 'C:\Users\Tom\AppData\Local\Temp\GD50C1.tmp' не является допустимым файлом GD в C:\xampp\htdocs\test\cropimage\FCreateImageFromBMP.php в строке 10

Если кто уже сталкивался с этим, помогите. Если вам нужно увидеть какой-либо код, просто дайте мне знать.

Заранее спасибо, Том.

Изменить: может быть полезно упомянуть строку, в которой возникает ошибка (как по ссылке выше), например:

$tmp_name = tempnam("/tmp", "GD");

person Tom    schedule 31.07.2011    source источник


Ответы (1)


Код, на который вы ссылаетесь, спасает, если несколько предварительных условий не выполняются:

if(!($src_f = fopen($src, "rb"))) { 
...
if(!($dest_f = fopen($dest, "wb"))) { 
...
if($type != 0x4D42) { // signature "BM" 

Итак, предполагая, что исходный файл и файлы tmp доступны для чтения/записи, похоже, что файл, который вы ему даете (который отправляется как .png, но дает тип mime BMP), на самом деле также не является файлом BMP, потому что содержимое файла не начинайте с идентификатора BM. Если вы прикрепите файл, возможно, кто-нибудь сможет определить, что это на самом деле.

Еще одно решение, которое я использовал для этой проблемы, — использовать команду convert ImageMagick для преобразования большинства типов файлов, какими бы они ни были, в желаемый формат:

// convert uses the file extension to determine the output format, so
// change .jpg to whatever you'd like
$tmp_name = tempnam("/tmp", "convert") . '.jpg';
exec('c:\path\to\imagemagick\convert ' . $inputFile . ' ' . $tmp_name);

Вы можете получить ImageMagick для Windows и других платформ здесь: Ссылка

person Jonathan Amend    schedule 31.07.2011