Moodle release 3.4.1
[moodle.git] / repository / flickr_public / image.php
blob0e0833be17a0dadd4c8409b06e9bad5866e7bfcc
1 <?php
3 // This file is part of Moodle - http://moodle.org/
4 //
5 // Moodle is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // Moodle is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
18 /**
19 * moodle_image class
21 * @package repository
22 * @subpackage flickr_public
23 * @author Dongsheng Cai <dongsheng@moodle.com>
24 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
26 class moodle_image {
27 private $imagepath;
28 private $info;
29 private $width;
30 private $height;
31 private $image;
32 private $backup;
34 function __construct($img) {
35 ini_set('gd.jpeg_ignore_warning', 1);
36 if(!function_exists('imagecreatefrompng')
37 and !function_exists('imagecreatefromjpeg')) {
38 throw new moodle_exception('gdnotexist');
40 if(!file_exists($img) or !is_readable($img)) {
41 throw new moodle_exception('invalidfile');
44 $this->imagepath = $img;
45 unset($img);
46 $this->info = getimagesize($this->imagepath);
48 switch($this->info['mime']) {
49 case 'image/jpeg':
50 $this->image = imagecreatefromjpeg($this->imagepath);
51 break;
52 case 'image/png':
53 $this->image = imagecreatefrompng($this->imagepath);
54 break;
55 case 'image/gif':
56 $this->image = imagecreatefromgif($this->imagepath);
57 break;
58 default:
59 break;
61 $this->width = imagesx($this->image);
62 $this->height = imagesy($this->image);
65 function destroy() {
66 imagedestroy($this->image);
67 imagedestroy($this->backup);
68 return true;
71 function undo() {
72 $this->image = $this->backup;
73 return $this;
76 function watermark($text='', $pos=array(), $options=array()) {
77 global $CFG;
78 $text = iconv('ISO-8859-8', 'UTF-8', $text);
79 if (empty($options['fontsize'])) {
80 if (!empty($options['ttf'])) {
81 $options['fontsize'] = 12;
82 } else {
83 $options['fontsize'] = 1;
87 if (empty($options['font'])) {
88 $options['font'] = $CFG->libdir . '/default.ttf';
90 if (empty($options['angle'])) {
91 $options['angle'] = 0;
93 $clr = imagecolorallocate($this->image, 255, 255, 255);
94 if (!empty($options['ttf'])) {
95 imagettftext($this->image,
96 $options['fontsize'], // font size
97 $options['angle'],
98 $pos[0],
99 $pos[1]+$options['fontsize'],
100 $clr,
101 $options['font'],
102 $text);
103 } else {
104 imagestring($this->image, $options['fontsize'], $pos[0], $pos[1], $text, $clr);
106 return $this;
109 function rotate($angle=0, $bgcolor=0) {
110 $this->image = imagerotate($this->image, $angle, $bgcolor);
111 return $this;
114 function resize($w, $h, $use_resize = true) {
115 if(empty($h) && !empty($w)) {
116 $h = $this->height * ($w/$this->width);
118 if(!empty($h) && empty($w)) {
119 $w = $this->width * ($h/$this->height);
121 $new_img = imagecreatetruecolor($w, $h);
122 imagealphablending($new_img, false);
123 imagecopyresampled($new_img /* dst */, $this->image /* src */, 0, 0, 0, 0, $w, $h, $this->width, $this->height);
124 $this->image = $new_img;
125 return $this;
128 function saveas($imagepath) {
129 switch($this->info['mime']) {
130 case 'image/jpeg':
131 return imagejpeg($this->image, $imagepath);
132 break;
133 case 'image/png':
134 return imagepng($this->image, $imagepath);
135 break;
136 case 'image/gif':
137 return imagegif($this->image, $imagepath);
138 break;
139 default:
140 break;
142 if(!$this->destroy()) {
143 return false;
144 } else {
145 return $this;
149 function display() {
150 header('Content-type: '.$this->info['mime']);
151 switch($this->info['mime']) {
152 case 'image/png':
153 imagepng($this->image);
154 break;
155 case 'image/jpeg':
156 imagejpeg($this->image);
157 break;
158 case 'image/gif':
159 imagegif($this->image);
160 break;
161 default:
162 break;
164 $this->destroy();
165 return $this;