Обновить
2

Пользователь

2
Подписчики
Отправить сообщение
версия 1.07 — корректный ресемплинг
вышла новая версия класса — 1.05, включающая общие кодовые улучшения, а также поддержка новых нестандартных форматов GIF файлов
опечатка, в коде выше мы анализируем не второй байт а десятый (что в принципе ясно с кода)…
Спасибо за комментарий. Сперва спрошу, вы сами анализировали код или с помощью анализаторов? Мне выше посоветовали phpMess Detector но как я его не прикручивал так и не прикрутил. Хочу также заметить что никак не ожидал такой дотошной разборки кода, но никак не критикую, а наоборот рад за это и благодарю каждого кто приложил/приложит усилия для улучшения кода (и каждого обязательно отмечу в следующем релизе класса). А теперь все по порядку:
1) масло масленое
 $lc_i = ord($this->gif[$this->pnt + 9]) & 128 ? 1 : 0; 
...
if ($lc_i) { ...

вы это вырвали с контекста
$lc_i = ord($this->gif[$this->pnt + 9]) & 128 ? 1 : 0;
$head = $this->gtb(10);
 if ($lc_i) {

как раз вторая строчка передвигает глобальный указатель, и нам надо успеть проанализировать второй байт(точнее бит) от текущего места, дабы знать куда двигаться после того как в переменную $head будет записан один из блоков GIF файла, в данном случае проверяем присутствие локальной палитры, можете сделать тест, отформатировать так как вы говорите, прогнать через класс анимированный GIF файл, а потом еще раз прогнать отресайзеный результат (как раз в выходном файле появляется локальная палитра) и как раз тут скрипт войдет в крутое пике или ступор (как кому нравится), поэтому здесь такая последовательность операторов;
2) второе замечание принимается, почему то ну недолюбливаю конструкцию switch-case, обычно использую если вариантов выбора более пяти, а класс по вашему совету обязательно откорректирую;
3) третье замечание в принципе тоже верно, но из за неимения свободного времени плюс к этому прабл с ин языками (а комьюнити у нас не только русскоязычное) пришлось ограничится только шапкой, не понял причем здесь компосер, насколько я помню это средство работы с библиотеками, а я использую только одну стандартную библиотеку GD, и последнее, а чем вам форматирование собственно не нравится? это как раз и есть NetBeans, или может вы предпочитаете аля PhpStorm ))))<source
обновил версию класса GIF_eXG (добавлена поддержка некоторых нестандартных форматов файлов) (текущая версия 1.04)
с подачи AotD вышел профиксеный вариант класса GIF_eXG (текущая версия 1.03)
спасибо обязательно посмотрю, NetBeans стоит в системе но по старинке пишу в Notepad++, надо постепенно мигрировать на те средства что вы предложили или в крайнем случае привлекать эпизодично к работе
я только что присмотрелся, да вы полностью правы, это торчат уши с второй версии скрипта, забыл убрать, убрал только в 88 строчке скрипта, а во всем проекте забыл, спасибо что ткнули носом, если вы не против, могу отблагодарить вас в шапке следующей версии скрипта как человека помогающего развитию кода…
да в принципе правильное замечание, сперва хотел прикрутить выброс исключения, но потом ради двух ошибок плюнул на это дело, думал также возвращать ошибку в виде картинки, или массив в первом элементе код ошибки во втором описание, но так у меня в коде где используется данный класс параноидальная проверка всего входящего то от этих идей отказался, в принципе не только у меня и а каждого должна быть может не такая но все же достаточная фильтрация дабы некорректные данные в сам класс не дошли (вылов подобных ошибок в классе мягко говоря не верно), здесь она(обработка ошибок) скорее для отладки, и последнее как я писал в паспорте скрипта скрипт разрешается изменять/модифицировать, пусть пользователи реализуют такую обработку которая им надо
в первом варианте скрипта я циклом проходился по всем битам файла во время анализа и рассортировки всей структуры по полочкам, но после когда код был реализован были большие проблемы с производительностью особенно на больших файлах, в последующем я изменил тактику, теперь я не бегу по всем битам файла, а откусываю кусками, в данном случае идет разбор расширения (в формате файла GIF89a их предусмотрено 4), а именно расширения-коментаррия, стандарт дает гарантию (и его обычно придерживаются), что в третьем бите хранится число обозначающее размер данных мы его сразу и получаем, то есть если в этом поле будет сохранена книга Война и мир (что вполне реально), мы ее откусим одним куском без пробега по ее символам, дальше стандарт можно сказать ничего не гарантирует (точнее его никто не соблюдает) то приходится просчитывать размер всего расширения циклом(но обычно основной объем данных ЗНАЧИТЕЛЬНО превышает размер технических данных отсюда и выигрыш), и все суммируя, после уже суму которая набежала и которая равна размеру расширения, передаем в функцию которая непосредственно выдирает эти данные из файла и сохраняет в переменную класса… думаю ясно объяснил
кого «их»? причем здесь ob_start? пишите яснее чтобы я не догадывался… скрипт отлавливает всего два простых вида ошибок: первая — неправильные параметры, которые отвечают за новый размер изображения(размер не может быть нулевой); вторая — неправильный формат файла, или другими словами все не gif файлы отметаются;
укажите на странность, чтобы было что объяснять, как я писал выше код три раза переписывался (практически изменился до неузнаваемости), сейчас в коде практически все вылизано и заточено под немогу, первый вариант скрипта «ложился» через нехватку памяти, для файла размером 6 Мб требовалось памяти 700 МБ (это была первая проблема), вторая как я писал скорость самого ресайза, которую тоже пришлось решать и вроде получилось, вами приведенный код наверное странноват (сам правда не пойму причину странности) из за оптимизации ресайза, уточните непонятный кусок кода все объясню или весь приведенный код объяснять?
Шикарный вывод ошибок. :)и что, в чем собственно проблема.......?
вернул ссылку на GitHub с полным форматированием кода
еще можно покритиковать сам PHP за слабую типизацию переменных и тд и тп, скрипт написан не выходя из тех рамок которые определены средой разработки то есть самим PHP, NeLexa ошибся указывая на ошибку типа Undefined variable (переменная не определена), здесь присутствует место «не инициализация переменной при объявлении», а на это решено было пойти намеренно через оптимизацию, сейчас объясню почему: переменные перечисленные NeLexa (и не только они) объявляются до входа в область видимости цикла для доступности к ним после выхода из него (хотя PHP позволяет и доступ к лок переменной после выхода из лок области, все вопросы к разработчикам PHP, я как раз тут и придерживался общепринятого стиля), почему же я ее сразу не инициализировал? а все потому что сразу при входе в лок область цикла переменной присваивается значение, существуют GIF файлы состоящие с 500 и даже более фреймов (количество не ограничено), для каждый фрейм прогоняется несколько раз через циклы для разбора, и это не такая быстрая задача скорее наоборот, а теперь давайте посчитаем 500 * 1(в лучшем случае, здесь могло быть и 2 и 3) * 10 (количество переменных, их больше десять просто для наглядности) = 5000 раз бессмысленной инициализации(и это в одном месте) за которой идет присваивание, когда и так не факт что скрипт будет выполнятся дефолтное для PHP скрипта время (30 сек); 500 фреймов может и редкость, но 100 обыденное дело и тут уже борьба за скорость ресайза (боролся за каждую долю секунды, для конечного пользователя), а теперь представте что пользователь ресайзит сразу пачку файлов, я в своем проекте масштабирую сразу 3 картинки (один исходный файл в 3 вариантах размера), в скрипте кстати можно увидеть очень длинные выражения и все из за того чтобы не использовать промежуточные переменные… думаю приблизительно объяснил причину
хорошо, и на гите обновлю, но только завтра после работы
сейчас на PhpClasses скину отформатированную версию со всеми правилами
какой то не конструктивное обсуждение, «зачем», «почему», «гитхаб», «форматрование»… жду поста типа «нашел файл с проблемой ресайза»
ссылку на гитхаб убрал
Нет, просто автор хотел незаметнее авторство своё увековечить.))))) увековечить да, скрыть нет, но в шапке описания также автор присутствует не пойму разве у меня нет прав сделать это? IDE выдаются ошибки, типа Undefined variable наверное это не ошибки, а предупреждения «хорошего стиля программирования», переменные определяются и инициализируются только там где они применяются не более и не менее, и не нужно к коду PHP применять параноидальные требования аля С++
1

Информация

В рейтинге
Не участвует
Откуда
Украина
Зарегистрирован
Активность