在图片上叠加数据的正确方法?
The right approach to overlay data on the picture?
有一个 class 用于在用户栏上呈现数据。
它工作正常,但我想澄清一下。在此过程中,数据叠加在图像上,您应该对 Imagick
和 ImagickDraw
使用 clone
- 以保存之前的叠加。
private function createImage($file): Imagick
{
$this->Imagick = new Imagick(__DIR__.'/Draw/Images/'.$file);
return $this->Imagick;
}
如何使用 clone
的示例:
private function drawRank(): Imagick
{
$image = clone $this->Imagick;
$rank = $this->createImage(self::RANK_IMAGE);
$rank->cropImage(32, 32, 0, $this->vector[$this->interface->rank_id]);
$image->compositeImage($rank, Imagick::COMPOSITE_DEFAULT, 64, 18);
return $image;
}
最后变成了这样:
private function call()
{
$this->Imagick = $this->createImage(self::BACKGROUND_IMAGE[$this->l]);
$this->Imagick = $this->drawRank();
$this->Imagick = $this->drawingProfile();
header('Content-Type: image/'.$this->Imagick->getImageFormat());
echo $this->Imagick;
}
这有多正确?我对这种方法有疑问。这是正常做法吗?
逻辑错误:
A=1
A=2
A=3
here A=3, value 1 and 2 are lost !
试试这个方法
$im1 = $this->createImage(self::BACKGROUND_IMAGE[$this->l]);
$im2 = $this->drawRank();
$im3 = $this->drawingProfile();
然后用 compositeImage 合成最终图像
// assuming transparent color is used in im2 and im3
// compose with image 2
$im1->compositeImage ($im2, Imagick::COMPOSITE_DEFAULT,0,0, Imagick::CHANNEL_ALPHA);
// compose with image 3
$im1->compositeImage ($im3, Imagick::COMPOSITE_DEFAULT,0,0, Imagick::CHANNEL_ALPHA);
有一个 class 用于在用户栏上呈现数据。
它工作正常,但我想澄清一下。在此过程中,数据叠加在图像上,您应该对 Imagick
和 ImagickDraw
使用 clone
- 以保存之前的叠加。
private function createImage($file): Imagick
{
$this->Imagick = new Imagick(__DIR__.'/Draw/Images/'.$file);
return $this->Imagick;
}
如何使用 clone
的示例:
private function drawRank(): Imagick
{
$image = clone $this->Imagick;
$rank = $this->createImage(self::RANK_IMAGE);
$rank->cropImage(32, 32, 0, $this->vector[$this->interface->rank_id]);
$image->compositeImage($rank, Imagick::COMPOSITE_DEFAULT, 64, 18);
return $image;
}
最后变成了这样:
private function call()
{
$this->Imagick = $this->createImage(self::BACKGROUND_IMAGE[$this->l]);
$this->Imagick = $this->drawRank();
$this->Imagick = $this->drawingProfile();
header('Content-Type: image/'.$this->Imagick->getImageFormat());
echo $this->Imagick;
}
这有多正确?我对这种方法有疑问。这是正常做法吗?
逻辑错误:
A=1
A=2
A=3
here A=3, value 1 and 2 are lost !
试试这个方法
$im1 = $this->createImage(self::BACKGROUND_IMAGE[$this->l]);
$im2 = $this->drawRank();
$im3 = $this->drawingProfile();
然后用 compositeImage 合成最终图像
// assuming transparent color is used in im2 and im3
// compose with image 2
$im1->compositeImage ($im2, Imagick::COMPOSITE_DEFAULT,0,0, Imagick::CHANNEL_ALPHA);
// compose with image 3
$im1->compositeImage ($im3, Imagick::COMPOSITE_DEFAULT,0,0, Imagick::CHANNEL_ALPHA);