php: хранение изображений в базе данных - PullRequest
0 голосов
/ 28 февраля 2011

В настоящее время я использую gd для преобразования изображения, загруженного в jpg с

imagjpeg($data,NULL,85)

, и сохраняю его в поле blob mysql.Проблема в качестве.Да, качество просто ужасное.Скриншот окна с текстом внутри становится довольно скучным.(Хотя со скриншотом игры качество приемлемо)

Должен ли я использовать другую библиотеку, кроме GD?Должен ли я использовать другой формат GD?(imagepng?)

пс.пожалуйста, обратите внимание: это не дубликат .. Я не спрашиваю, как сохранить img в db

ps2.обратите внимание, что если я должен изменить свой текущий формат / метод, я должен конвертировать что-то вроде 5000-6000 изображений, уже сохраненных как jpg в моем db

ps3.я использую 85 для imagejpeg, не могу использовать более высокое значение, потому что размер изображения вырастет больше, чем оригинальная версия

ps4.Мне нужно сохранить изображение в БД, пожалуйста, оставайтесь в теме

Спасибо всем

================================

РЕФОРМИРОВАНИЕ ВОПРОСА

Я сохраняю изображение (в основном программные скриншоты, иногда скриншоты игр) в поле BLOB после выполнения imagejpeg($resourceFromImageCreateFromString,NULL,85);

Проблема, с которой я сталкиваюсь, заключается в том, что загруженное изображение выглядит довольно плохо по сравнению с оригиналом, даже если оно того же размера.(иногда он становится больше из-за 85)

Неужели реализация imagejpeg отстой?

пс.Мой простой скрипт загрузки выполняет следующие вызовы:

upload file
open it with "rb" (binary)
pass the data to imagecreatefromstring
pass the result to imagejpeg

Еще раз спасибо

Ответы [ 4 ]

1 голос
/ 28 февраля 2011

Вы можете установить качество вывода с 3-м параметром на imagejpeg () . Проблема в том, что JPEG - не лучший формат для изображений с большим количеством текста - вам нужно выбирать между снижением качества и получением большого количества артефактов в изображении, или повышением качества и наличием большого размера файла. Вы можете рассмотреть возможность использования PNG.

1 голос
/ 28 февраля 2011

Есть ли особая причина, по которой вы хотите хранить свое изображение внутри BLOB? Какой качественный аргумент вы передали imagejpeg ()?

0 голосов
/ 28 февраля 2011

моя первая рекомендация - попытаться сохранить его в формате png, так как качество лучше.

моя вторая рекомендация - попробовать параметр качества в imagejpeg($image, $filename, $quality).

рекомендация № 3.- Я работал над сайтом, на котором мне пришлось переписать систему хранения изображений, потому что они реализовали то, что вы делаете, сохраняя изображения как BLOB s в базе данных.В их системе было всего около 20 тыс. Изображений, и она выходила из строя еженедельно, поскольку база данных не могла справиться с нагрузкой.

Процесс преобразования для изображений размером 5-6 КБ не должен занимать более пары часов, независимо от размераизображений.Когда я конвертировал свои образы в хранилище на диске из хранилища БД, я запускал изображения по 1 КБ за раз, и каждый запуск занимал 5-10 минут.

0 голосов
/ 28 февраля 2011

Почему вы все равно перекодируете, если это уже JPEG?Чтобы сэкономить место?Хорошо, но тогда у вас уже есть свой ответ, частично - чтобы сэкономить место из jpg в jpg, вы должны сохранить в низком качестве.

Вы не можете указать качество с помощью imagecopyresampled, с помощью imagejpeg вы можете.Используйте высокое (er) значение для параметра качества.

Обратите внимание, что JPEG - это формат, оптимизированный для хранения FOTOS.Изображения с большими областями одного цвета, прямыми линиями и т. Д. Гораздо лучше сохраняются в формате без потерь, например PNG.Конечно, если у вас есть скриншот, снятый с экрана с фотографиями в качестве фона стола, у вас есть элементы обоих - так что выбирайте свой формат в соответствии с тем, что вы хотите.Если фото-часть важнее и вам не важны шрифты и линии, используйте jpeg.Конечно, JPEG может быть так же хорошего качества, как и PNG для скриншотов, но тогда вы теряете большинство его возможностей сжатия, вам нужно использовать настройку качества 90%.При 100% JPEG тоже без потерь, но к тому времени PNG может фактически иметь меньший размер (файл).

...