Post by acidline » Thu Jun 18, 2009 12:48 am

Re,

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);
    }
Normalement c'est GOOD ! ;)

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);	
Une autre solutions consiste à placer le watermark uniquement sur les photos de la fiche produit. Dans ce cas, j'ai cette astuce :

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);			
		}

Puis dans votre controller/product/product il faut trouver ces lignes

Code: Select all

$this->data['popup'] = HelperImage::resize($image, 400, 400);
$this->data['thumb'] = HelperImage::resize($image, 250, 250);
et les remplacer comme ceci (on passe le 1 en paramètre pour activer le watermark, comme ça pas besoin de modifier tous les controllers ;) )

Code: Select all

$this->data['popup'] = HelperImage::resize($image, 400, 400, 1);
$this->data['thumb'] = HelperImage::resize($image, 250, 250, 1);
Je crois que j'ai fait le tour !

Nico

Newbie

Posts

Joined
Fri Aug 01, 2008 8:16 pm
Who is online

Users browsing this forum: No registered users and 1 guest