1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

imagemagick PHP и мотоциклы

Тема в разделе 'PHP', создана пользователем wsok, 25 окт 2014.

Статус темы:
Закрыта.
  1. TopicStarter Overlay

    wsok Программист Пользователи

    Сообщения:
    606
    Лайки:
    173
    Пол:
    Мужской
    Репутация:
    3
    Попытаюсь объяснить буквально на пальцах, не прибегая к основному фрагменту кода. Есть скрипт, который читает в массив текстовый файл с записями иконок (тот что из клиента пв) и на основе этого должен разрезать файл с иконками на отдельные иконки, т.е. резалка. С использованием GD скрипт отлично выводит весть текстовый файл в массив, прогоняет по циклу и в итоге получаю отдельные иконки.

    В общем, решил заменить GD на imagemagick и... теперь скрипт срабатывает, но режет только первую иконку в массиве и все... Т.е. как только в цикле выполняется строчка:
    PHP:
    $image->cropImage($gtxt[0],$gtxt[1],$y,$x);
    Работа цикла прерывается, обрезается лишь первая иконка. В чем дело? Ведь с использованием GD массив через цикл весь проходит, а вот при imagemagick цикл обрабатывает лишь первый элемент массив и отрубается. Почему использование imagemagick стопорит цикл? Кстати в качестве цикла использую этот метод:

    PHP:
    foreach($listen as $index => $val)
    Ну и скриншоты с резкльтатами:
    GD - как видно массив нормально проходит через цикл
    dd87efe50d.jpg

    ImageMagick - как только первый объект массива обработан, цикл прерывается...

    993ef9f191.jpg

    Довольное странно...
    Последнее редактирование: 25 окт 2014
  2. TopicStarter Overlay

    wsok Программист Пользователи

    Сообщения:
    606
    Лайки:
    173
    Пол:
    Мужской
    Репутация:
    3
    Тоже не удержался и нажал кнопку жалоба на пост. Может я бы и закрыл глаза на этот пост, но если бы его делал человек не из группы "программист". Но такой как вы позор для мморга. Суть вопроса не в том, чтоб понять что одна технология хуже другой, а совсем в другом, почему функции GD не влияют на процесс прохода массива через цикл, тогда как функции imagemagick влияют.
  3. SomePerson Программист Old school Пользователи

    Сообщения:
    227
    Лайки:
    123
    Пол:
    Мужской
    Репутация:
    3
    Друг мой, меньше агрессии, я специально написал OFFTOP, а не прямой ответ или оскорбление. (это Вам на будущее)
    Topic>Смотрите на цельность массива (если массив всё-же рабочий, то пробуйте вручную вырезать картинки (что бы узнать, работает ли сам имейджмейджик)).
    BONUS: Лучше прикладывать код, а не отдельные куски (а идеально было бы ДО и ПОСЛЕ), вместо того, что бы клепать картинки как БЫЛО и как ЕСТЬ.
  4. TopicStarter Overlay

    wsok Программист Пользователи

    Сообщения:
    606
    Лайки:
    173
    Пол:
    Мужской
    Репутация:
    3
    массив рабочий и имейджик рабочий, он ведь вырезает первую иконку.


    Ну я думаю так, если человек имеет большой опыт, то он по идее уже знает о данном моменте и особенностях методов в GD и Imagemagick.

    Мои же попытки найти в гугле оказались напрасными, подобного метода использования имайджмагик никто не обсуждал (чтоб на основе массива текстового файла в цикле можно было делать операции по обрезки)
  5. SomePerson Программист Old school Пользователи

    Сообщения:
    227
    Лайки:
    123
    Пол:
    Мужской
    Репутация:
    3
    Мало что он выдает одну картинку, я говорю, попробуйте имитировать действия.
    Гениально конечно, и предыдущие данные я получу из названий переменных, верно?
  6. TopicStarter Overlay

    wsok Программист Пользователи

    Сообщения:
    606
    Лайки:
    173
    Пол:
    Мужской
    Репутация:
    3
    Хорошо, вот два варианта кода, отличаются лишь тем что в одном изображениями манипулирует GD а во втором имайджмагик.

    2edf779b25.jpg e912cbbece.jpg
    --- добавлено: 25 окт 2014 в 13:04 ---
    для меня не столько принципиально заставить этот код работать с имаджмагик, столько хотелось бы понять, почему он отрубает процесс цикличности при обработке массива.
    Последнее редактирование модератором: 2 ноя 2014
  7. vieraw Пользователи

    Сообщения:
    54
    Лайки:
    27
    Репутация:
    0
    А что ты хотел? Выведи все ошибки и увидишь ошибку: Can not process empty Imagick object. И это логично ты же удалил объект Imagick в 20 строке.
    Последнее редактирование модератором: 2 ноя 2014
    Joslian нравится это.
  8. TopicStarter Overlay

    wsok Программист Пользователи

    Сообщения:
    606
    Лайки:
    173
    Пол:
    Мужской
    Репутация:
    3
    для меня не столько принципиально заставить этот код работа
    Ты насчет этого?

    PHP:
    $image->destroy();
    Без него то же самое, обрыв цикла на первом объекте массива...
    Последнее редактирование модератором: 2 ноя 2014
  9. vieraw Пользователи

    Сообщения:
    54
    Лайки:
    27
    Репутация:
    0
    Кинь код файлом и png с txt тоже.
    Последнее редактирование модератором: 2 ноя 2014
  10. TopicStarter Overlay

    wsok Программист Пользователи

    Сообщения:
    606
    Лайки:
    173
    Пол:
    Мужской
    Репутация:
    3
    дело в том, что файл с иконками весит около 8 мб и к посту не смогу его приложить (полетел тапок в сторону администрации форума =)) ))

    Но сам скрипт резалки можно скачать тут: http://mmorpg-devs.ru/threads/pw-iiset-Инструмент-для-обработки-иконок-игрового-клиента.17223/

    скрипт резалки в папке iis

    там он у меня выполнен по GD методу, но ты легко сможешь изучить скрины с кодом что я выше давал и привести код к такому же виду с использованием имайджмагик. Файл с иконками и его тектстовик можно взять из клиента пв (распаковав соответствующий архив клиента)
  11. vieraw Пользователи

    Сообщения:
    54
    Лайки:
    27
    Репутация:
    0
    Ну ты молодец.
    1)У меня нет клиента.
    2)Я прекрасно знаю как режутся эти иконки и нет желания еще что-то писать.
    P.S. Какой путь до файла указываешь? У меня с относительным не работает он.
  12. TopicStarter Overlay

    wsok Программист Пользователи

    Сообщения:
    606
    Лайки:
    173
    Пол:
    Мужской
    Репутация:
    3
    файл с иконками и его текстовик в той же папке что и скрипт обработки.


    PHP:
    $fname "iconlist_ivtrm";
          
    $ficons="{$fname}.png";
      
    $gtxt file("{$fname}.txt");
      
    $image = new Imagick($ficons);
      
    $s 1;
      
    $listen array_slice($gtxt4);
      for(
    $i=0$i<count($listen); $i++)
      {
      
    $strsubstr($listen[$i], strrpos($listen[$i], "."));

      ++
    $ii;
      ++
    $si;
      if(
    $si $gtxt[3]) {$s++; $si 1;}
         
          
    $str_to mb_convert_encoding($str'utf-8''gb2312');
          
    $y $s*$gtxt[0]-$gtxt[0];
          
    $x $si*$gtxt[1]-$gtxt[1];
    $image->cropImage($gtxt[0],$gtxt[1],$y,$x);
    $image->writeImage("result/{$str_to}.png");
    echo
    "{$ii}{$str_to}.png<br>";

      }
    ?>
    Вот собственно код над которым я завис )) Правда в этом варианте я цикл теперь использую FOR, что увы не повлияло на результат.
  13. vieraw Пользователи

    Сообщения:
    54
    Лайки:
    27
    Репутация:
    0
    PHP:
    <?php
    $fname 
    'iconlist_ivtrf';
    $ficons $fname.'.png';
    $gtxt file($fname.'.txt');
    $s 1;
    $listen array_slice($gtxt4);
    $image = new Imagick();
    for(
    $i=0$i<count($listen); $i++)
    {
        
    $image->readImage($ficons);
        
    $strsubstr($listen[$i], strrpos($listen[$i], "."));
        ++
    $ii;
        ++
    $si;
        if(
    $si $gtxt[3]) {$s++; $si 1;}
        
    $str_to mb_convert_encoding($str'utf-8''gb2312');
        
    $y $s*$gtxt[0]-$gtxt[0];
        
    $x $si*$gtxt[1]-$gtxt[1];
        
    $image->cropImage($gtxt[0], $gtxt[1], $x$y);
        
    $image->writeImage($str_to.'.png');
        echo 
    $ii'.'$str_to'.png''</br>';
    }
    wsok и Joslian нравится это.
  14. TopicStarter Overlay

    wsok Программист Пользователи

    Сообщения:
    606
    Лайки:
    173
    Пол:
    Мужской
    Репутация:
    3
    увы, не работает вообще, даже первую иконку не обработал.
  15. vieraw Пользователи

    Сообщения:
    54
    Лайки:
    27
    Репутация:
    0
    Просто нет слов. Включи ты уже вывод ошибок и посмотри на что ругается.
    http://img.quissa.ru/2014-10-25-15-28-00.jpg Я бы тебе не кинул не проверив на работоспособность.
  16. TopicStarter Overlay

    wsok Программист Пользователи

    Сообщения:
    606
    Лайки:
    173
    Пол:
    Мужской
    Репутация:
    3
    увы, директива не работает

    Код:
    error_reporting(E_ALL);
    --- добавлено: 25 окт 2014 в 16:38 ---
    заработал, но при запуске в консоли сервера
    --- добавлено: 25 окт 2014 в 16:47 ---
    ладно, для консоли собственно и задумывалось... но теория моя не подтвердилась, увы и на имайджмагик скрипт разрезки тоже работает не так быстро как хотелось бы...
    --- добавлено: 25 окт 2014 в 16:48 ---
    благодарю за помощь =)
    Последнее редактирование модератором: 2 ноя 2014
  17. pdev 14:23 Команда форума Администратор Программист Open Source Contributor

    Сообщения:
    1.409
    Лайки:
    1.406
    Пол:
    Мужской
    Репутация:
    7
    Команда:
    Indy
    Страна:
    Turkey Turkey
    у нас не file hosting
Черновик сохранён Черновик удалён
Статус темы:
Закрыта.

Поделиться этой страницей