+ Ответить в теме
Показано с 1 по 15 из 15
  1. #1
    Мастер Аватар для kazer_xxx
    Регистрация
    08.01.2011
    Адрес
    Копейск
    Сообщений
    1,148

    Imagick, очистка

    Как очистить изображение от наложенных эффектов? Пробовал добавить новое изображение через ::addImage, но вылетют ошибки.
    P.S.До сохранения в файл
    Как хочу быть красненьким и с надписью "Админ"

  2. #2
    Админ Аватар для vGhost
    Регистрация
    27.07.2011
    Адрес
    Самара
    Сообщений
    2,033
    Если будет чуть больше подробностей, в виде подробного описания задачи и кода, может и смогу помоч.

    __________________________________________________ ________
    Угу, угу... А потом достал из морозильной камеры - и степлером его, степлером!
    Для новичков
    __________________________________________________ ________
    Я практически совсем не задаю вопросов, не думали почему? Потому что я пользуюсь поиском и всегда нахожу ответы на свои вопросы!

  3. #3
    Мастер Аватар для kazer_xxx
    Регистрация
    08.01.2011
    Адрес
    Копейск
    Сообщений
    1,148
    Использую Imagick::annotateImage для наложения текста. Ихображение сохраняется один раз, но потом, не закрывая программу, вносятся изменения в позицию, текст, цвет и т.д., но получается, что текст снова накладывается и получается несколько объектов текста.
    Как хочу быть красненьким и с надписью "Админ"

  4. #4
    Админ Аватар для vGhost
    Регистрация
    27.07.2011
    Адрес
    Самара
    Сообщений
    2,033
    Примерно я вас понял, решается одной строкой (если я правильно понял задачу), но блин, напишите полный код, я вставлю в него одну строку и всё будет ок, это на много быстрей чем я буду полностью имплементировать весь код который у вас уже есть, чтоб вставить в него нужную строку. Берегите время тех кто вам отвечает..
    По сути, вам нужно клонировать основной объект и всё, вот вы поняли как и где чё? Наврятли. Проще показать эту строку в коде куда вставить.

    __________________________________________________ ________
    Угу, угу... А потом достал из морозильной камеры - и степлером его, степлером!
    Для новичков
    __________________________________________________ ________
    Я практически совсем не задаю вопросов, не думали почему? Потому что я пользуюсь поиском и всегда нахожу ответы на свои вопросы!

  5. #5
    Мастер Аватар для kazer_xxx
    Регистрация
    08.01.2011
    Адрес
    Копейск
    Сообщений
    1,148
    PHP код:
    //Где-то в создании
    $Im = new Imagick('G:\Images\13370537.png');
    $ImPx = new ImagickPixel();
    $ImDr = new ImagickDraw();
    $ImDr->setFillColor('gray');
    $ImDr->setFont('Arial');
    $ImDr->setFontSize12 );

    //Где-то на выходе
    $x c("label1")->x;
    $y c("label1")->y;

    $Im->annotateImage$ImDr$x$y0$text);
    $Im->writeimage("out.png"); 
    Как хочу быть красненьким и с надписью "Админ"

  6. #6
    Админ Аватар для vGhost
    Регистрация
    27.07.2011
    Адрес
    Самара
    Сообщений
    2,033
    PHP код:
    //Где-то в создании 
    $Im = new Imagick('G:\Images\13370537.png'); 
    $ImPx = new ImagickPixel(); 
    $ImDr = new ImagickDraw(); 
    $ImDr->setFillColor('gray'); 
    $ImDr->setFont('Arial'); 
    $ImDr->setFontSize12 ); 

    //Где-то на выходе 
    $x c("label1")->x
    $y c("label1")->y

    $Texts = Array('text 1''text 2''text 3''text 4''text 5');
    $cc 0;
    ForEach(
    $Texts AS $text)
    {
        
    $tmp = clone $Im// эта та самая строка о которой я говорил
        
    $tmp->annotateImage$ImDr$x$y0IConv('CP1251''UTF-8//TRANSLIT'$text)); 
        
    $tmp->writeimage('out' $cc++ . '.png');


    __________________________________________________ ________
    Угу, угу... А потом достал из морозильной камеры - и степлером его, степлером!
    Для новичков
    __________________________________________________ ________
    Я практически совсем не задаю вопросов, не думали почему? Потому что я пользуюсь поиском и всегда нахожу ответы на свои вопросы!

  7. Пользователь сказал cпасибо:

    kazer_xxx (04.02.2012)

  8. #7
    Мастер Аватар для kazer_xxx
    Регистрация
    08.01.2011
    Адрес
    Копейск
    Сообщений
    1,148
    Дело в том, что я написал небольшой класс для работы с Imagick, и всё равно накладываются:
    PHP код:
    class OL
    {
        private 
    $Im;
        private 
    $ImPx;
        private 
    $ImDr;
        private 
    $file;

        function 
    OL($file)
            {
                
    $this->Im = new Imagick($file);
                
    $this->ImPx = new ImagickPixel();
                
    $this->ImDr = new ImagickDraw();
                
    $this->file =$file;
            }

        function 
    AddText($x$y){
                
    $color 'gray';
                
    $font 'Arial';
                
    $size 12;
                
    $this->ImDr->setFillColor($color);
                
    $this->ImDr->setFont($font);
                
    $this->ImDr->setFontSize$size );
                
    $this->Im->annotateImage$this->ImDr$x$y0,'OLOLO' );
        }
        function 
    WriteIm($file){

            return 
    $this->Im->writeimage($file);
        }



    }

    $b = new OL("Template_1.png");
    $a = clone $b;
    $a->AddText(1015);
    $a->WriteIm("ol.png");
    $x = clone $b;
    $a->AddText(4550);
    $a->WriteIm("ol.png"); 
    Нажмите на изображение для увеличения
Название: Template_1..jpg
Просмотров: 3
Размер:	3.1 Кб
ID:	1176
    Было
    Нажмите на изображение для увеличения
Название: ol..jpg
Просмотров: 4
Размер:	3.5 Кб
ID:	1175
    Стало
    Последний раз редактировалось kazer_xxx; 04.02.2012 в 21:30.
    Как хочу быть красненьким и с надписью "Админ"

  9. #8
    Админ Аватар для vGhost
    Регистрация
    27.07.2011
    Адрес
    Самара
    Сообщений
    2,033
    Потому что вы не то клонируете, при клонировании объекта вашего класса, свойство вашего класса Im, являющееся ссылкой на объект класса Imagick будет скопирована, а не клонирована.
    Вам надо исправить сие положение в вашем классе так, короче добавьте в ваш класс следующий метод:

    PHP код:
        public function __clone() {
            
    $this->Im = clone $this->Im;
        } 
    И тогда всё будет ок, вот этот код:
    PHP код:
    $b = new OL("Template_1.png"); 
    $a = clone $b
    $a->AddText(1015); 
    $a->WriteIm("ol.png"); 
    $x = clone $b
    $a->AddText(4550); 
    $a->WriteIm("ol.png"); 
    будет работать как задуманно.
    Подробности почитайте тут: http://ru2.php.net/manual/ru/language.oop5.cloning.php

    __________________________________________________ ________
    Угу, угу... А потом достал из морозильной камеры - и степлером его, степлером!
    Для новичков
    __________________________________________________ ________
    Я практически совсем не задаю вопросов, не думали почему? Потому что я пользуюсь поиском и всегда нахожу ответы на свои вопросы!

  10. Пользователь сказал cпасибо:

    kazer_xxx (04.02.2012)

  11. #9
    Мастер Аватар для kazer_xxx
    Регистрация
    08.01.2011
    Адрес
    Копейск
    Сообщений
    1,148
    То ли я дурак, толи лыжи не катят, но работать не хочет.
    Как хочу быть красненьким и с надписью "Админ"

  12. #10
    Админ Аватар для vGhost
    Регистрация
    27.07.2011
    Адрес
    Самара
    Сообщений
    2,033
    Цитата Сообщение от kazer_xxx Посмотреть сообщение
    То ли я дурак, толи лыжи не катят, но работать не хочет.
    Я надеюсь вы не убрали вот из этого кода:
    PHP код:
    $b = new OL("Template_1.png");  
    $a = clone $b;  
    $a->AddText(1015);  
    $a->WriteIm("ol.png");  
    $x = clone $b;  
    $a->AddText(4550);  
    $a->WriteIm("ol.png"); 
    инструкцию clone после того как добавили метод о котором я написал?

    __________________________________________________ ________
    Угу, угу... А потом достал из морозильной камеры - и степлером его, степлером!
    Для новичков
    __________________________________________________ ________
    Я практически совсем не задаю вопросов, не думали почему? Потому что я пользуюсь поиском и всегда нахожу ответы на свои вопросы!

  13. #11
    Мастер Аватар для kazer_xxx
    Регистрация
    08.01.2011
    Адрес
    Копейск
    Сообщений
    1,148
    Цитата Сообщение от vGhost Посмотреть сообщение
    инструкцию clone после того как добавили метод о котором я написал?
    Конечно же нет.
    Как хочу быть красненьким и с надписью "Админ"

  14. #12
    Админ Аватар для vGhost
    Регистрация
    27.07.2011
    Адрес
    Самара
    Сообщений
    2,033
    Тогда скиньте мне image magik dll расширение(а то у меня его нет) для пхп и укажите версию студии, сделаю рабочий пример.

    __________________________________________________ ________
    Угу, угу... А потом достал из морозильной камеры - и степлером его, степлером!
    Для новичков
    __________________________________________________ ________
    Я практически совсем не задаю вопросов, не думали почему? Потому что я пользуюсь поиском и всегда нахожу ответы на свои вопросы!

  15. #13
    Мастер Аватар для kazer_xxx
    Регистрация
    08.01.2011
    Адрес
    Копейск
    Сообщений
    1,148
    Цитата Сообщение от vGhost Посмотреть сообщение
    Тогда скиньте мне image magik dll расширение(а то у меня его нет) для пхп и укажите версию студии, сделаю рабочий пример.
    Мне не нужен рабочий пример, мне нужно разобраться с моим кодом.
    В архиве DLL и проект
    DS3.
    Вложения
    Как хочу быть красненьким и с надписью "Админ"

  16. #14
    Админ Аватар для vGhost
    Регистрация
    27.07.2011
    Адрес
    Самара
    Сообщений
    2,033
    Шото оно не хочет у меня принципиально запускаться, сначала ей не понравился мой x86_64 ImageMagik, ладна, поставил 32, всё равно болт, так что пришлось решать проблему на чистом пхп, на Linux. Но тут разницы никако не будет вобщем то.
    В итоге запустил всё это дело под линуксом (у меня там всё настроено давно и работает) Открыл ваш код и начал громко материться, ругаться и вообще не культурно выражаться.. При чём как на вас за невнимательность, так и на себя за тоже самое.

    Код:
    $b = new OL("Template_1.png");  
    $a = clone $b;  
    $a->AddText(10, 15);  
    $a->WriteIm("ol.png");  
    $x = clone $b;     // ага ИКС да?
    $a->AddText(45, 50);  // А тогда с какого перепугу тут А то?!!
    $a->WriteIm("ol.png"); // И тут тоже!



    Вобщем ладна, чтоб не было жалко зря потраченного времени, вот вам немного оптимизированный с т.з. производительности ваш код:


    PHP код:
    class OL
    {
        private 
    $Im;
        private 
    $ImPx;
        private 
    $ImDr;
        private 
    $file;

        Function 
    __construct($file)
        {
            
    $this->Im    = new Imagick($file);
            
    $this->ImPx  = new ImagickPixel();
            
    $this->ImDr  = new ImagickDraw();
            
    $this->file  $file;

            
    // небольшая оптимизация производительности
            
    $this->SetFont();
        }

        Public Function 
    __clone()
        {
            
    $this->Im = clone $this->Im;
        }


        Protected Function 
    SetFont()
        {
            
    $color 'gray';
            
    $font  'Arial';
            
    $size  12;
            
    $this->ImDr->setFillColor($color);
            
    $this->ImDr->setFont($font);
            
    $this->ImDr->setFontSize($size);
        }

        Function 
    AddText($x$y)
        {
            
    $this->Im->annotateImage($this->ImDr$x$y0,'OLOLO');
        }

        Function 
    WriteIm($file)
        {
            Return 
    $this->Im->writeimage($file);
        }
    }

    $b = new OL("Template_1.png");  
    $a = clone $b;  
    $a->AddText(1015);  
    $a->WriteIm("ol.png");  
    $x = clone $b;     
    $x->AddText(4550);
    $x->WriteIm("ol.png"

    __________________________________________________ ________
    Угу, угу... А потом достал из морозильной камеры - и степлером его, степлером!
    Для новичков
    __________________________________________________ ________
    Я практически совсем не задаю вопросов, не думали почему? Потому что я пользуюсь поиском и всегда нахожу ответы на свои вопросы!

  17. #15
    Мастер Аватар для kazer_xxx
    Регистрация
    08.01.2011
    Адрес
    Копейск
    Сообщений
    1,148
    Цитата Сообщение от vGhost Посмотреть сообщение
    $x = clone $b; // ага ИКС да?
    $a->AddText(45, 50); // А тогда с какого перепугу тут А то?!!
    $a->WriteIm("ol.png"); // И тут тоже!
    Чёрт, все глаза просмотрел - не видел..
    Ну спасибо и за оптимизацию)
    Как хочу быть красненьким и с надписью "Админ"

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения