summaryrefslogtreecommitdiff
path: root/protected/extensions/SimpleImage/SimpleImage.php
blob: 54c4ef896a4c5086c8a63c92910bdae66f1b3398 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<?php
/**
 * Class to hold information about an image and to provide basic operations on images.
 * @link http://www.yiiframework.com/extension/simpleimage/
 * @author tzur
 *
 */
class SimpleImage {
    /**
     * The image.
     * @var resource
     */
    var $image;
    /**
     * The type of the image.
     * @see http://www.php.net/manual/en/image.constants.php
     * @var integer
     */
    var $image_type;
    /**
     * The image informations.
     * @see http://www.php.net/manual/en/function.getimagesize.php 
     * @var array
     */
    var $image_info;

    /**
     * Creates the SimpleImage instance and loads all necessary information.
     * @param string $filename
     * @link http://www.php.net/manual/en/function.getimagesize.php
     * @link http://www.php.net/manual/en/function.imagecreatefromjpeg.php
     * @link http://www.php.net/manual/en/function.imagecreatefromgif.php
     * @link http://www.php.net/manual/en/function.imagecreatefrompng.php
     * 
     */
    function __construct($filename) {
        $this->image_info = $image_info = getimagesize($filename);
        $this->image_type = $image_info[2];
        if ($this->image_type == IMAGETYPE_JPEG) {
            $this->image = imagecreatefromjpeg($filename);
        } elseif ($this->image_type == IMAGETYPE_GIF) {
            $this->image = imagecreatefromgif($filename);
        } elseif ($this->image_type == IMAGETYPE_PNG) {
            $this->image = imagecreatefrompng($filename);
        }
    }

    /**
     * Saves the image.
     * @param string $filename
     * @param int $image_type
     * @param int $compression
     * @param int $permissions
     * @link http://www.php.net/manual/en/function.imagejpeg.php
     * @link http://www.php.net/manual/en/function.imagegif.php
     * @link http://www.php.net/manual/en/function.imagepng.php
     * @link http://www.php.net/manual/en/function.chmod.php
     */
    function save($filename, $image_type = IMAGETYPE_JPEG, $compression = 75, $permissions = null) {
        if ($image_type == IMAGETYPE_JPEG) {
            imagejpeg($this->image, $filename, $compression);
        } elseif ($image_type == IMAGETYPE_GIF) {
            imagegif($this->image, $filename);
        } elseif ($image_type == IMAGETYPE_PNG) {
            imagepng($this->image, $filename);
        }
        if ($permissions != null) {
            chmod($filename, $permissions);
        }
    }
    
    /**
     * Outputs the image.
     * @param int $image_type
     * @link http://www.php.net/manual/en/function.imagejpeg.php 
     * @link http://www.php.net/manual/en/function.imagegif.php 
     * @link http://www.php.net/manual/en/function.imagepng.php 
     */
    function output($image_type = IMAGETYPE_JPEG) {
        if ($image_type == IMAGETYPE_JPEG) {
            imagejpeg($this->image);
        } elseif ($image_type == IMAGETYPE_GIF) {
            imagegif($this->image);
        } elseif ($image_type == IMAGETYPE_PNG) {
            imagepng($this->image);
        }
    }
    
    /**
     * Returns the width of the image.
     * @return int Return the width of the image or false on errors. 
     * @link http://www.php.net/manual/en/function.imagesx.php 
     */
    function getWidth() {
        return imagesx($this->image);
    }
    
    /**
     * Returns the height of the image.
     * @return int Return the height of the image or false on errors. 
     * @link http://www.php.net/manual/en/function.imagesy.php 
     */
    function getHeight() {
        return imagesy($this->image);
    }
    
    /**
     * Resizes the image to given height.
     * Keeps the ratio.
     * @param number $height
     */
    function resizeToHeight($height) {
        $ratio = $height / $this->getHeight();
        $width = $this->getWidth() * $ratio;
        $this->resize($width, $height);
    }
    
    /**
     * Resizes the image to given width.
     * Keeps the ratio.
     * @param number $width
     */
    function resizeToWidth($width) {
        $ratio = $width / $this->getWidth();
        $height = $this->getHeight() * $ratio;
        $this->resize($width, $height);
    }
    
    /**
     * Scales the image with given scale.
     * @param number $scale
     */
    function scale($scale) {
        $width = $this->getWidth() * $scale / 100;
        $height = $this->getHeight() * $scale / 100;
        $this->resize($width, $height);
    }
    
    /**
     * Resizes the image to given width and height.
     * @param number $width
     * @param number $height
     * @link http://www.php.net/manual/en/function.imagecopyresampled.php
     */
    function resize($width, $height) {
        $new_image = imagecreatetruecolor($width, $height);
        imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
        $this->image = $new_image;
    }
    
    function blend($width, $height) {
   		$this->resizeToWidth($width);
    	$new_image = imagecreatetruecolor($width, $height);
    	imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $width, $height);
    	imagealphablending($new_image,true);
    	imagefilledrectangle($new_image, 0, 0,  $width, $height, imagecolorallocatealpha($new_image, 255, 255, 255, 30));
    	$this->image = $new_image;
    	
    }
}
?>