Yuriy-Khomenko / GIF_eXG

PHP script for resize gif image file with support animation and transparency
14 stars 5 forks source link

Читабельность кода #4

Open IamFake opened 10 years ago

IamFake commented 10 years ago

Здравствуйте.

Ваш скрипт весьма полезная штука, обрабатывает на моём железе гифы со 120ю кадрами и весом в 4.5 МБ за 0.7 секунды без ресамплинга и 2 секунды с ним, что весьма приемлемо по сравнению с ImageMagick, которой на это требуется от 7 до 14 секунд, спасибо Вам за работу.

Но возможностей скрипта мне не хватало, была потребность в аналоге Imagick::cropThumbnailImage и реализация этой функциональности была несколько затруднительна ввиду очень плохой читабельности кода.

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

Yuriy-Khomenko commented 10 years ago

Полностью с вами соглашусь, у меня проблема с говорящими за себя названиям переменных (хотя мне это вовсе не мешает), но с другой стороны скрипт (хоть и выкладывался на GitHub) представляет из себя "черный ящик", то есть при выполнении своего функционального назначения я не предполагал что его внутренность пользователь будет разбирать, это одна из причин нечитабельности кода (хотя это не мешает пользователю в нем разобраться). Будет ли рефакторинг ? Я от него не отказываюсь, но все упирается в время которого у меня практически нет, у меня есть еще две идеи по улучшению скрипта, но и на них нужно найти свободное время. Кстати не понял о какой функциональности идет, вот что нарыл в интернете - "Функция cropThumbnailImage() уменьшает изображение и отрезает лишние края." Что за лишние края ? Как они задаются ? Она (функция) просто режет картинку или ресайзит а потом режет ? Объясните пожалуйста причем желательно на пальцах, возможно постараюсь вам помочь. Если хотите все таки сами разобраться в скрипте и реализовать данный функционал то обратите внимание на функцию resize_img() именно там должен он реализовываться. Спасибо за положительный отзыв о скрипте (я на скорость с ImageMagick не проверял, поэтому вдвойне приятно), видать робота моя зря не пропала.

11.01.2014, 17:46, "Vitaliy" notifications@github.com:

Здравствуйте.

Ваш скрипт весьма полезная штука, обрабатывает на моём железе гифы со 120ю кадрами и весом в 4.5 МБ за 0.7 секунды без ресамплинга и 2 секунды с ним, что весьма приемлемо по сравнению с ImageMagick, которой на это требуется от 7 до 14 секунд, спасибо Вам за работу.

Но возможностей скрипта мне не хватало, была потребность в аналоге Imagick::cropThumbnailImage и реализация этой функциональности была несколько затруднительна ввиду очень плохой читабельности кода.

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

— Reply to this email directly or view it on GitHub.

IamFake commented 10 years ago

Спасибо, но тот функционал я уже реализовал. Со свободным временем у меня тоже проблемы :) но imageMagick не оставил выбора - потратить время ) imageMagick джпеги и пнг обрабатывает на раз. В случае gif - сама процедура ресайза и кропа отрабатывает тоже моментально, но когда я сохраняю файл как анимированный гиф - writeImages($file, true) вот тут приходится ждать от 6 до 14 секунд. Думаю у них эта часть не оптимизирована осталась с давних времён.

cropThumbnailImage работает так: допустим у меня есть изображение 450х350 пискселей и мне нужна миниатюра 170х170 и именно квадратная и таких размеров. В "обычном режиме" - я получу просто искажение изображения по горизонтали, а используя cropThumbnailImage уменьшение происходит в 2 этапа - сначала идет ресайз оригинала по наименьшей грани (т.е. в моем случае 450х350 превращаются в 228х170, а не в 170х128), а затем делается crop "из серединки" т.е. отступ с лева по схеме (228-170) / 2 и в итоге я получаю квадратную миниатюру без искажений.