Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Безопасное копирование (https://javascript.ru/forum/misc/71523-bezopasnoe-kopirovanie.html)

Sonya 26.11.2017 18:13

Цитата:

Сообщение от laimas (Сообщение 471268)
JPEG формат не поддерживает анимацию, разберитесь что у вас сохранилось.

Да, я знаю, но не один раз встречала именно анимацию в формате jpg. Теперь Вы мне пояснили почему. Причем у меня показывает анимацию в трех разных браузерах.
Я так понимаю теперь все вшивки в exif, будут отсечены, а изменением размера можно уничтожить и в теле картинке? Но если размер изображения равен необходимому, можно это сделать двойным ресайзом, например, сначала увеличить на несколько пикселей, а потом вернуть к исходному. Или суть здесь, именно в измененном от начального размере.

laimas 26.11.2017 18:21

Цитата:

Сообщение от Sonya
не один раз встречала именно анимацию в формате jpg

Такой анимации нет, нет поддержки. Можно посредством JS устроить анимацию из нескольких jpeg изображений, либо спрайт таких изображений со встроенным SVG, который и занимается анимацией. Понятное дело, что попадись вам такой, GD его не откроет корректно, а если и сможет, то не сохранит.

Sonya 26.11.2017 18:26

Да, и хостинг поддерживает ImageMagick, код от этого меняется?

laimas 26.11.2017 18:33

Цитата:

Сообщение от Sonya
Я так понимаю теперь все вшивки в exif, будут отсечены

Да, сохранится чистый ресурс, хотя при наличии exif их можно прочесть. Проверьте.

Цитата:

Сообщение от Sonya
а изменением размера можно уничтожить и в теле картинке?

Да. При выводе на экран изображений посредством GD, в случае предупреждений/ошибок в браузер будут выведено не изображение, а его бинарные данные. На это и расчет такого встраивания - запуск РНР кода встроенного в тело изображения. Для этого еще надо постараться, но ...

Цитата:

Сообщение от Sonya
Но если размер изображения равен необходимому, можно это сделать двойным ресайзом, например, сначала увеличить на несколько пикселей, а потом вернуть к исходному.

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

laimas 26.11.2017 18:38

Цитата:

Сообщение от Sonya
Да, и хостинг поддерживает ImageMagick, код от этого меняется?

Конечно код будет иной. Причем API для работы с ImageMagick есть как расширение (во многом пока экспериментальное), но не поставляется вместе с РНР. Как у вас на хосте сказать не могу. Если нет поддержки со стороны РНР, то значит из командной строки запуск будет.

С GD просто проще, но она и более прожорлива и уступает во многом ImageMagick, хотя для вашей задачи вполне хватит.

Sonya 26.11.2017 18:41

Цитата:

Сообщение от laimas (Сообщение 471274)
Я не знаю чего вы сохраняете и насколько требования к размерам, но конечно можно изменить, затем опять изменить.

Размер анимации 100х100, например, пользователь загружает её, я увеличиваю до 101х101, потом возвращаю к размеру 100х100 (будет незначительная потеря качества), таким образом я удалю вредоносный код из тела картинки?

laimas 26.11.2017 19:04

Цитата:

Сообщение от Sonya
пользователь загружает её, я увеличиваю до 101х101, потом возвращаю к размеру 100х100

Не получится - GD не работает с GIF анимацией, exif в данном файле нет, встраивать что-то в тело не имеет смысла, у данного типа сложный заголовок и не одна секция описания. Менять размеры не надо - проверили палитру - индексированная, значит просто сохраняем file_put_contents(...);

Lion777 26.11.2017 19:06

дадите ссылочку на ваше творение, хочется помотреть как не будет грузить сервер

Sonya 26.11.2017 19:14

laimas, спасибо.
Lion777, пока некондиция.

laimas 27.11.2017 06:08

Sonya,
сохранение в GIF, тоже некорректно:

file_put_contents('path/name.jpg', $f); //сохранение GIF/PNG8 -> GIF

Если исходное, это GIF, то все будет нормально, если же PNG8, то нет. Нужно дополнительно здесь проверять тип изображения и сохранять под соответствующим расширением.


Часовой пояс GMT +3, время: 18:10.