| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | <?phpnamespace fphammerle\helpers;class Image{    use \fphammerle\helpers\PropertyAccessTrait;    protected $_resource = null;    private function __construct()    {    }    public function __destruct()    {        if($this->_resource) {            imagedestroy($this->_resource);        }    }    /**     * @param string $path     * @return Image     */    public static function fromFile($path)    {        $image = new self;        switch(exif_imagetype($path)) {            case IMAGETYPE_JPEG:                $image->_resource = imagecreatefromjpeg($path);                break;            case IMAGETYPE_PNG:                $image->_resource = imagecreatefrompng($path);                break;            default:                throw new \InvalidArgumentException("type of '$path' is not supported");        }        return $image;    }    public function getWidth()    {        return imagesx($this->_resource);    }    public function getColorAt($x, $y)    {        $colors = imagecolorsforindex(            $this->_resource,            imagecolorat($this->_resource, $x, $y)            );        return new \fphammerle\helpers\colors\RGBA(            $colors['red'] / 0xFF,            $colors['green'] / 0xFF,            $colors['blue'] / 0xFF,            1 - $colors['alpha'] / 127            );    }    /**     * @param float $angle anticlockwise     * @return void     */    public function rotate($angle)    {        $angle = fmod($angle, 360);        if(abs($angle) > 1e-10) {            $resource = imagerotate($this->_resource, $angle, 0);            imagedestroy($this->_resource);            $this->_resource = $resource;        }    }    /**     * @return void     */    public function rotateLeft()    {        $this->rotate(90);    }    /**     * @return void     */    public function rotateRight()    {        $this->rotate(270);    }    /**     * @param string $path     * @return void     */    public function saveJpeg($path)    {        imagejpeg($this->_resource, $path);    }}
 |