La class Image comprend une méthode qui déconne lorsque l'on souhaite créer un watermark (sorte de copyright sur les images).
Voici les réparations :
Dans la classe image situé dans system/library/image.php il faut modifier la méthode watermark :
Code: Select all
public function watermark($file, $position = 'bottomright') {
//$watermark = $this->create($file); => premier problème, on ne travaille pas sur le bon objet, normalement vos images sont en jpg et les watermark en png (transparence), si l'on ne change pas ça une jolie erreur apparait !
$watermark = imagecreatefrompng($file);
$watermark_width = imagesx($watermark);
$watermark_height = imagesy($watermark);
switch($position) {
case 'topleft':
$watermark_pos_x = 0;
$watermark_pos_y = 0;
break;
case 'topright':
$watermark_pos_x = $this->info['width'] - $watermark_width;
$watermark_pos_y = 0;
break;
case 'bottomleft':
$watermark_pos_x = 0;
$watermark_pos_y = $this->info['height'] - $watermark_height;
break;
case 'bottomright':
$watermark_pos_x = $this->info['width'] - $watermark_width;
$watermark_pos_y = $this->info['height'] - $watermark_height;
break;
}
//ici il faut changer les deux dernier nombre par les tailles du watermark
imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark_width, $watermark_height);
imagedestroy($watermark);
}
Pour utiliser tout ça, c'est pas trop dur, il faut se rendre dans le helper image situé system/helper/image.php
Vous pouvez modifier comme ça :
Code: Select all
$image = new Image(DIR_IMAGE . $old_image);
$image->resize($width, $height);
//vaut mieux le placer après... le resize !
$image->watermark(HTTP_IMAGE . 'watermark.png', 'bottomright');
$image->save(DIR_IMAGE . $new_image);
Code: Select all
final class HelperImage {
static public function resize($filename, $width, $height=0, $watermark=0) {
if (!file_exists(DIR_IMAGE . $filename)) {
return;
}
//au passage pour faire les images carrées, pas besoin de définir height
if(empty($height)) { $height = $width; }
.................................................. bla bla bla
$image = new Image(DIR_IMAGE . $old_image);
$image->resize($width, $height);
if($watermark) {
$image->watermark(HTTP_IMAGE . 'watermark.png', 'bottomright');
}
$image->save(DIR_IMAGE . $new_image);
}
Code: Select all
$this->data['popup'] = HelperImage::resize($image, 400, 400);
$this->data['thumb'] = HelperImage::resize($image, 250, 250);
Code: Select all
$this->data['popup'] = HelperImage::resize($image, 400, 400, 1);
$this->data['thumb'] = HelperImage::resize($image, 250, 250, 1);
Nico