From 5fdc39c72514d425daec3c347747ae099f1072e1 Mon Sep 17 00:00:00 2001 From: dongsheng Date: Sun, 5 Jul 2009 14:15:18 +0000 Subject: [PATCH] "MDL-18830, add watermark to flickr image" --- repository/flickr_public/image.php | 149 ++++++++++++++++++ repository/flickr_public/repository.class.php | 6 +- 2 files changed, 153 insertions(+), 2 deletions(-) create mode 100755 repository/flickr_public/image.php diff --git a/repository/flickr_public/image.php b/repository/flickr_public/image.php new file mode 100755 index 00000000000..bb4d558df37 --- /dev/null +++ b/repository/flickr_public/image.php @@ -0,0 +1,149 @@ +imagepath = $img; + unset($img); + $this->info = getimagesize($this->imagepath); + + switch($this->info['mime']) { + case 'image/jpeg': + $this->image = imagecreatefromjpeg($this->imagepath); + break; + case 'image/png': + $this->image = imagecreatefrompng($this->imagepath); + break; + case 'image/gif': + $this->image = imagecreatefromgif($this->imagepath); + break; + default: + break; + } + if (empty($this->image)) { + throw new moodle_exception('invalidimage'); + } + $this->width = imagesx($this->image); + $this->height = imagesy($this->image); + } + + function destroy() { + imagedestroy($this->image); + imagedestroy($this->backup); + return true; + } + + function undo() { + $this->image = $this->backup; + return $this; + } + + function watermark($text='', $pos=array(), $options=array()) { + global $CFG; + $text = iconv('ISO-8859-8', 'UTF-8', $text); + if (empty($options['fontsize'])) { + if (!empty($options['ttf'])) { + $options['fontsize'] = 12; + } else { + $options['fontsize'] = 1; + } + } + + if (empty($options['font'])) { + $options['font'] = $CFG->libdir . '/default.ttf'; + } + if (empty($options['angle'])) { + $options['angle'] = 0; + } + $clr = imagecolorallocate($this->image, 255, 255, 255); + if (!empty($options['ttf'])) { + imagettftext($this->image, + $options['fontsize'], // font size + $options['angle'], + $pos[0], + $pos[1]+$options['fontsize'], + $clr, + $options['font'], + $text); + } else { + imagestring($this->image, $options['fontsize'], $pos[0], $pos[1], $text, $clr); + } + return $this; + } + + function rotate($angle=0, $bgcolor=0) { + $this->image = imagerotate($this->image, $angle, $bgcolor); + return $this; + } + + function resize($w, $h, $use_resize = true) { + if(empty($h) && !empty($w)) { + $h = $this->height * ($w/$this->width); + } + if(!empty($h) && empty($w)) { + $w = $this->width * ($h/$this->height); + } + $new_img = imagecreatetruecolor($w, $h); + imagealphablending($new_img, false); + imagecopyresampled($new_img /* dst */, $this->image /* src */, 0, 0, 0, 0, $w, $h, $this->width, $this->height); + $this->image = $new_img; + return $this; + } + + function saveas($imagepath='') { + if (empty($imagepath)) { + $imagepath = $this->imagepath; + } + switch($this->info['mime']) { + case 'image/jpeg': + return imagejpeg($this->image, $imagepath); + break; + case 'image/png': + return imagepng($this->image, $imagepath); + break; + case 'image/gif': + return imagegif($this->image, $imagepath); + break; + default: + break; + } + if(!$this->destroy()) { + return false; + } else { + return $this; + } + } + + function display() { + header('Content-type: '.$this->info['mime']); + switch($this->info['mime']) { + case 'image/png': + imagepng($this->image); + break; + case 'image/jpeg': + imagejpeg($this->image); + break; + case 'image/gif': + imagegif($this->image); + break; + default: + break; + } + $this->destroy(); + return $this; + } +} + diff --git a/repository/flickr_public/repository.class.php b/repository/flickr_public/repository.class.php index 468535e0c33..4ed6414eacb 100644 --- a/repository/flickr_public/repository.class.php +++ b/repository/flickr_public/repository.class.php @@ -11,6 +11,7 @@ */ require_once($CFG->libdir.'/flickrlib.php'); +require_once(dirname(__FILE__) . '/image.php'); /** * @@ -333,7 +334,7 @@ class repository_flickr_public extends repository { $format = '.'.$format; if (substr($p['title'], strlen($p['title'])-strlen($format)) != $format) { // append author id - $p['title'] .= '-'.$p['owner']; + // $p['title'] .= '-'.$p['owner']; // append file extension $p['title'] .= $format; } @@ -384,7 +385,8 @@ class repository_flickr_public extends repository { $watermark = get_config('flickr_public', 'watermark'); if (!empty($watermark)) { - // process watermark + $img = new moodle_image($path); + $img->watermark($url, array(10,10), array('ttf'=>true, 'fontsize'=>9))->saveas($path); } return $path; }