Как очистить изображение от наложенных эффектов? Пробовал добавить новое изображение через ::addImage, но вылетют ошибки.
P.S.До сохранения в файл
Как очистить изображение от наложенных эффектов? Пробовал добавить новое изображение через ::addImage, но вылетют ошибки.
P.S.До сохранения в файл
Как хочу быть красненьким и с надписью "Админ"
Если будет чуть больше подробностей, в виде подробного описания задачи и кода, может и смогу помоч.
__________________________________________________ ________
Угу, угу... А потом достал из морозильной камеры - и степлером его, степлером!
Для новичков
__________________________________________________ ________
Я практически совсем не задаю вопросов, не думали почему? Потому что я пользуюсь поиском и всегда нахожу ответы на свои вопросы!
Использую Imagick::annotateImage для наложения текста. Ихображение сохраняется один раз, но потом, не закрывая программу, вносятся изменения в позицию, текст, цвет и т.д., но получается, что текст снова накладывается и получается несколько объектов текста.
Как хочу быть красненьким и с надписью "Админ"
Примерно я вас понял, решается одной строкой (если я правильно понял задачу), но блин, напишите полный код, я вставлю в него одну строку и всё будет ок, это на много быстрей чем я буду полностью имплементировать весь код который у вас уже есть, чтоб вставить в него нужную строку. Берегите время тех кто вам отвечает..
По сути, вам нужно клонировать основной объект и всё, вот вы поняли как и где чё? Наврятли. Проще показать эту строку в коде куда вставить.
__________________________________________________ ________
Угу, угу... А потом достал из морозильной камеры - и степлером его, степлером!
Для новичков
__________________________________________________ ________
Я практически совсем не задаю вопросов, не думали почему? Потому что я пользуюсь поиском и всегда нахожу ответы на свои вопросы!
PHP код://Где-то в создании
$Im = new Imagick('G:\Images\13370537.png');
$ImPx = new ImagickPixel();
$ImDr = new ImagickDraw();
$ImDr->setFillColor('gray');
$ImDr->setFont('Arial');
$ImDr->setFontSize( 12 );
//Где-то на выходе
$x = c("label1")->x;
$y = c("label1")->y;
$Im->annotateImage( $ImDr, $x, $y, 0, $text);
$Im->writeimage("out.png");
Как хочу быть красненьким и с надписью "Админ"
PHP код://Где-то в создании
$Im = new Imagick('G:\Images\13370537.png');
$ImPx = new ImagickPixel();
$ImDr = new ImagickDraw();
$ImDr->setFillColor('gray');
$ImDr->setFont('Arial');
$ImDr->setFontSize( 12 );
//Где-то на выходе
$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, $y, 0, IConv('CP1251', 'UTF-8//TRANSLIT', $text));
$tmp->writeimage('out' . $cc++ . '.png');
}
__________________________________________________ ________
Угу, угу... А потом достал из морозильной камеры - и степлером его, степлером!
Для новичков
__________________________________________________ ________
Я практически совсем не задаю вопросов, не думали почему? Потому что я пользуюсь поиском и всегда нахожу ответы на свои вопросы!
kazer_xxx (04.02.2012)
Дело в том, что я написал небольшой класс для работы с 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, $y, 0,'OLOLO' );
}
function WriteIm($file){
return $this->Im->writeimage($file);
}
}
$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");
Было
Стало
Последний раз редактировалось kazer_xxx; 04.02.2012 в 21:30.
Как хочу быть красненьким и с надписью "Админ"
Потому что вы не то клонируете, при клонировании объекта вашего класса, свойство вашего класса Im, являющееся ссылкой на объект класса Imagick будет скопирована, а не клонирована.
Вам надо исправить сие положение в вашем классе так, короче добавьте в ваш класс следующий метод:
И тогда всё будет ок, вот этот код:PHP код:public function __clone() {
$this->Im = clone $this->Im;
}
будет работать как задуманно.PHP код:$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");
Подробности почитайте тут: http://ru2.php.net/manual/ru/language.oop5.cloning.php
__________________________________________________ ________
Угу, угу... А потом достал из морозильной камеры - и степлером его, степлером!
Для новичков
__________________________________________________ ________
Я практически совсем не задаю вопросов, не думали почему? Потому что я пользуюсь поиском и всегда нахожу ответы на свои вопросы!
kazer_xxx (04.02.2012)
То ли я дурак, толи лыжи не катят, но работать не хочет.
Как хочу быть красненьким и с надписью "Админ"
__________________________________________________ ________
Угу, угу... А потом достал из морозильной камеры - и степлером его, степлером!
Для новичков
__________________________________________________ ________
Я практически совсем не задаю вопросов, не думали почему? Потому что я пользуюсь поиском и всегда нахожу ответы на свои вопросы!
Тогда скиньте мне image magik dll расширение(а то у меня его нет) для пхп и укажите версию студии, сделаю рабочий пример.
__________________________________________________ ________
Угу, угу... А потом достал из морозильной камеры - и степлером его, степлером!
Для новичков
__________________________________________________ ________
Я практически совсем не задаю вопросов, не думали почему? Потому что я пользуюсь поиском и всегда нахожу ответы на свои вопросы!
Шото оно не хочет у меня принципиально запускаться, сначала ей не понравился мой 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, $y, 0,'OLOLO');
}
Function WriteIm($file)
{
Return $this->Im->writeimage($file);
}
}
$b = new OL("Template_1.png");
$a = clone $b;
$a->AddText(10, 15);
$a->WriteIm("ol.png");
$x = clone $b;
$x->AddText(45, 50);
$x->WriteIm("ol.png")
__________________________________________________ ________
Угу, угу... А потом достал из морозильной камеры - и степлером его, степлером!
Для новичков
__________________________________________________ ________
Я практически совсем не задаю вопросов, не думали почему? Потому что я пользуюсь поиском и всегда нахожу ответы на свои вопросы!