Конвертиране на 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, но дава тип BMP mime), всъщност също не е BMP файл, защото съдържанието на файла не започвайте с BM идентификатора. Ако прикачите файла, може би някой ще може да идентифицира какво всъщност представлява.

Друго решение, което използвах за този проблем, е да използвам командата за конвертиране на 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