clone Nette\Image

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
R2D2
Člen | 22
+
0
-

při klonování nyní dojde pouze ke zkopírování GD resource, tj. změny v klonu se pochopitelně projeví i v originále. Ne že by to byl nějaký zásadní problém, ale někdy by člověk očekával jiné chování – například když si vytvořím jednotné pozadí a do něj pak budu šoupat různé obrázky na překrytí, přijde mi hezčí klonovat, než vytvořit prázdný a kopírovat obsah ručně

návrh řešení je přidání metody:

<?php
    /**
     *  Clones image resource (eg. create a new one and copy content)
     */
    public function __clone()
    {
        $clonedResource = imagecreatetruecolor($this->getWidth(), $this->getHeight());
        imagecopymerge($clonedResource, $this->getImageResource(), 0, 0, 0, 0, $this->getWidth(), $this->getHeight(), 100);
        $this->setImageResource($clonedResource);
    }
?>
R2D2
Člen | 22
+
0
-

koukám podle dokumentace to dokonce vypadá, že by to fungovat mělo ( zdroj https://doc.nette.org/cs/utils/images )

Během manipulace s obrázkem je možné kdykoliv udělat jeho kopii:

$dolly = clone $image;

taková kopie v současnosti moc smysl nedává, když obě instance pracují se stejným resourcem