Skip to content

Commit

Permalink
"MDL-18830, add watermark to flickr image"
Browse files Browse the repository at this point in the history
  • Loading branch information
dongsheng committed Jul 5, 2009
1 parent 318f051 commit 5fdc39c
Show file tree
Hide file tree
Showing 2 changed files with 153 additions and 2 deletions.
149 changes: 149 additions & 0 deletions repository/flickr_public/image.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
<?php
class moodle_image {
private $imagepath;
private $info;
private $width;
private $height;
private $image;
private $backup;

function __construct($img) {
if(!function_exists('imagecreatefrompng')
and !function_exists('imagecreatefromjpeg')) {
throw new moodle_exception('gdnotexist');
}
if(!file_exists($img) or !is_readable($img)) {
throw new moodle_exception('invalidfile');
}

$this->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;
}
}

6 changes: 4 additions & 2 deletions repository/flickr_public/repository.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
*/

require_once($CFG->libdir.'/flickrlib.php');
require_once(dirname(__FILE__) . '/image.php');

/**
*
Expand Down Expand Up @@ -333,7 +334,7 @@ private function build_list($photos, $page = 1, &$ret) {
$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;
}
Expand Down Expand Up @@ -384,7 +385,8 @@ public function get_file($photo_id, $file = '') {

$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;
}
Expand Down

0 comments on commit 5fdc39c

Please sign in to comment.