2009-03-24 7 views
3

Определенный сайт, который я знаю, недавно обновил свою полосу от 2,5 ТБ ежемесячно до 3,5 ТБ.Наличие изображения, лишенного метаданных при загрузке в PHP

Причина в том, что они недавно перешли границу 2,5. Они жалуются, что не знают, как снизить использование полосы пропускания.

Одна вещь, которую я не видел, это тот факт, что JPEG и другие изображения, которые отображаются на сайте (и это сайт с тяжелым изображением), могут содержать метаданные. Где была сделана фотография и такова.

Дело в том, что эта информация не имеет никакого значения на этом сайте. Его никогда не будет использовать. Тем не менее, он все еще увеличивает пропускную способность, поскольку увеличивает размер каждого изображения с нескольких байтов до нескольких килобайт.

На сайте, который использует более 2,5 ТБ в месяц, снятие нескольких тысяч изображений их метаданных поможет уменьшить использование полосы пропускания, по крайней мере, на несколько гигабайт в месяц, я думаю, если не больше.

Итак, есть ли способ сделать это на PHP? А также, для уже существующих файлов, знает ли кто-нибудь хороший автоматический сброс метаданных? Я знаю JPEG & PNG Stripper, но это не очень хорошо ... Может быть полезно для предварительной очистки, хотя ...

ответ

3

Отъезд Smush.it! Он удалит всю информацию о недобросовестности с изображения. У них есть API вы можете использовать для хруста изображений.

Примечание:By Design, он может изменить Filetype на вас. Это специально. Если другой тип файла может отображать одно и то же изображение с тем же качеством, с меньшим количеством байтов он даст вам новый файл.

+0

. У них больше нет публичного API. Их веб-сайт говорит, что он находится в разработке. – JVE999

+0

Хм, это облом. Угадайте, что пришло время работать над инструментом, чтобы сделать это локально ... Я не думаю, что это было бы слишком сложно с GD, просто не забудьте «разрушить» любое сжатие JPEG при изменении значений метаданных. – scunliffe

6

Это тривиальное с GD:

$img = imagecreatefromjpeg("myimg.jpg"); 
imagejpeg($img, "newimg.jpg", $quality); 
imagedestroy($img); 

Это не будет передавать данные EXIF. Не знаю, сколько пропускной способности он фактически сохранит, однако, но вы можете использовать приведенный выше код для увеличения сжатия изображений. Это сэкономит много полосы пропускания, хотя, возможно, это будет не очень популярно.

+0

Я видел этот подход, принятый на форуме фотографии, и был «менее популярен», когда некоторые пользователи стонали, что изображения были значительно разными (так как они были перекодированы при последовательном уровень качества) –

5

Я серьезно сомневаюсь, что метаданные изображения - это корень всего зла.

Некоторые вопросы, чтобы принять во внимание:

  • Как веб-сервер настроен?
  • Правильно ли он отправляет http 304 ответа?
  • Нет ли какой-либо ручной кеширования/потоковой передачи данных через php-скриптинг, который предотвращает кеширование данных из браузера? (в этом случае следует учитывать переписывание URL и перенаправление http).
+0

Это не будет основной причиной этой проблемы. Тем не менее, устраняя эту проблему, сайт может получить некоторую передышку, принимая серьезные проблемы. Когда вам нужно выжать что-то из плотной области, первое, что вы делаете, это чип-бит в стороне. – KdgDev

+0

Правильное кэширование может помочь намного больше, чем немного метаданных здесь и там ... –

+0

@WebDevHobo: подойдите, но остерегайтесь ненужного раздувания кода для ненужных исправлений;) –

3

Я думаю, вам нужно продумать это. Возможно, вы правы в этом, экономя несколько ГБ, но это относительно мало на 2,5 ТБ пропускной способности. Вам нужны реальные данные о том, что обслуживается больше всего и над чем работать. Если вы обнаружите, что это изображения, которые так сильно увеличивают использование полосы пропускания, вы должны сначала проверить свои заголовки кеширования и 304 ответа, вы также можете изучить, используя что-то вроде amazon S3 для обслуживания ваших изображений. Сделав это, мне удалось значительно снизить стоимость полосы пропускания.

При этом, если данные EXIF ​​действительно вносят большую часть разницы, вы можете использовать библиотеку GD для копирования jpeg-изображения с помощью функции imagejpeg. Это не будет копировать данные EXIF.

2

Возможно, Эмиль Х обращается к вопросу наилучшим образом.

Но я хотел добавить, что это почти наверняка не спасет вас так сильно, как вы думаете.Этот тип метаданных занимает очень мало места; Я думаю, что

  1. Re-сжатия изображений на меньший размер файла, и
  2. Обрезка или изменение размера, чтобы уменьшить разрешение изображения

оба собираются иметь гораздо больший эффект, , С одной только точкой вы могли бы снизить пропускную способность на 50%, и с обоими вы могли бы снизить пропускную способность 80%, то есть если вы готовы пожертвовать некоторым размером изображения.

Если нет, вы всегда можете иметь вид по умолчанию меньшего размера с ссылкой «увеличить». Большинство пользователей просто просматривают изображение меньшего размера, и только те, кто хочет самый большой размер, будут щелкать, чтобы увеличить его, так что вы все равно получите почти всю пропускную способность. Это то, что делает Flickr, например.

+0

Чтобы дать простой пример, я однажды попробовал эту программу, чтобы я поместил здесь память объемом 1,7 ГБ, содержащую ничего, кроме изображений. Эта программа будет обрабатывать только файлы JPG и PNG, и я все равно потерял 320 МБ без потери качества изображения. – KdgDev

+0

Я предполагаю, что если все они являются довольно маленькими изображениями, тогда метаданные будут занимать больше места, и вы сохраните больше.Я предполагаю, что я принимал фотографии с полным разрешением :) – thomasrutter

+0

Myeah, большинство этих фотографий - рисунки манги, которые редко бывают 1024x768. – KdgDev

0

Возможно, что-то вроде манипуляции с шестнадцатеричными данными поможет здесь. Я сталкиваюсь с той же проблемой и исследую какое-то автоматическое решение.

Просто интересно, если это можно сделать, и, если возможно, я напишу для этого класс php.

+0

Чувак, не надо, пойдите, проверьте www.smush.it – KdgDev

0

Может быть умным делать все манипуляции с изображениями на стороне клиента (используя апплет java, например, facebook), а затем, когда изображение сжато, изменено и полностью лишено ненужных пикселей и контента, оно может быть загружено на это оптимальный размер, экономя вашу пропускную способность и производительность на стороне сервера! (за счет первоначальной разработки)