Преобразуйте Растровые файлы в JPEG, пользующийся библиотекой GD в PHP

Походит на проблему кодировки символов, в которой файл сохранен как различная кодировка символов к тому, что веб-сервер говорит, что это.

6
задан Boann 22 November 2014 в 11:54
поделиться

4 ответа

Используйте эту функцию:

http://www.programmierer-forum.de/function-imagecreatefrombmp-welche-variante-laeuft-t143137.htm

Он поддерживает несколько битрейтов, например 16 и 32 бит. Кроме того, он содержит некоторые исправления, касающиеся отсутствующего размера файла, отрицательных цветовых палитр, вывода ошибок, дополнительного 16-битного заголовка маски (это была основная проблема для 16-битной) и уменьшенной цветовой палитры (biClrUsed).

Надеюсь, вам понравится;)

Обновление в 2015 году: эта функция теперь является частью DOMPDF (поиск на странице "imagecreatefrombmp") и доведена до совершенства. Теперь он охватывает сжатые 4- и 8-битные файлы, игнорирует неважные заголовки и поддерживает специальную 16-битную маску 565.

11
ответ дан 9 December 2019 в 22:36
поделиться

В то время как GD не поддерживает BMP изначально, небольшой поиск в Google предоставляет несколько пользовательских реализаций функции imagecreatefrombmp ().

Я не пробовал их, но уверен, что по крайней мере один из них подойдет вам.

0
ответ дан 9 December 2019 в 22:36
поделиться

Вне моей головы:

function convert_to_jpeg( $input_path, $output_path )
{
    $image = imagecreatefromstring(file_get_contents($input_path));
    imagejpeg($image, $output_path);
    imagedestroy($image);
}

Это будет принимать любой формат, который GD может обрабатывать в качестве ввода и вывода файл jpeg. Я не знаю, какую версию GD вы используете, но моя прекрасно обрабатывает .bmp, как и версия, которую мы использовали в предыдущей компании, в которой я работал. (в Mac OS X 10.6 и CentOS 5 соответственно)

редактировать : забыл imagedestroy! ой!

0
ответ дан 9 December 2019 в 22:36
поделиться

Как насчет функции imagejpeg ?

bool imagejpeg (resource $ image [, строка $ filename [, int $ quality]] )

imagejpeg () создает файл JPEG из данное изображение.

Чтобы получить помощь по поддержке формата BMP в GD, посмотрите, например, здесь .

РЕДАКТИРОВАТЬ: Это не поддерживает 16-битные изображения, что является правильным как исходное растровое изображение спецификация не поддерживает это. В вашем случае выясните, какой битовый шаблон используется для кодирования значения цвета. Я предполагаю, что это 5 бит для R и B, 6 бит для G и порядок BGR в этом решении (пожалуйста, вставьте в код, на который я ссылался выше):

else if ($bits == 16) {
$gd_scan_line = "";
$j = 0;
while($j < $scan_line_size) {
$byte1 = $scan_line{$j++};
$byte2 = $scan_line{$j++};
$b = chr($byte1 >> 3) * (255 / 31); 
$g = (chr($byte1 & 0x07) + chr($byte2 >> 5)) * (255 / 63);
$r = chr($byte2 & 0x1F) * (255 / 31);
$gd_scan_line .= "\x00$r$g$b";
}

Обратите внимание, что я не тестировал этот код (в частности, я Я не уверен насчет масштабирования до 0..255), и он будет работать только при использовании 5-6-5-битного шаблона (ну, он будет работать и с другими, но цвета будут неправильными).

0
ответ дан 9 December 2019 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: