Script php: Aggiungere un logo watermark ad una immagine
difficoltà:

Download
Script simili
9/11/2006
Script inviato da: Silvio Rainoldi
Web site: www.ianaz.ch
Questa classe consente di aggiungere ad un'immagine un logo (watermark) in un punto a scelta dell'immagine. Lo script consente inoltre di creare una thumb dell'immagine stessa.
L'utilizzo base è molto semplice, basta includere il file img.class.php e indicare il percorso dell'immagine a cui aggiungere il logo e il percorso del logo stesso:
<?In questo modo verrà aggiunta all'immagine pippo.jpg il logo logo.png e creata la miniatura. Possono inoltre essere settate alcune proprietà aggiuntive che, se non specificate saranno quelle di default:
require("img.class.php");
$img = new img;
$img->AddLogo("pippo.jpg", "logo.png");
?>
<?Ecco qui a questo punto il file img.class.php:
require("img.class.php");
$img = new img;
//variabili settabili (valori segnati default)
$img->name = ""; //nome immagine senza estensione, di default preso nome originale
$img->thumb_w = 172; // larghezza thumb in px
$img->thumb_h = 130; // altezza thumb in px
$img->max_w = 720; // larghezza max in px
$img->max_h = 540; // altezza max in px
$img->pos_x = "RIGHT"; // posizione logo -> RIGHT, LEFT, CENTER
$img->pos_y = "BOTTOM"; // posizione logo -> BOTTOM, TOP, MIDDLE
$img->img_folder = ""; // cartella immagine grande (default-> cartella dell'immagine originale)
$img->thumb_folder = ""; // cartella immagine thumb (default-> cartella dell'immagine originale)
$img->saveBIG = 1; //salvare immagine grande 1 o 0
$img->saveTHUMB = 1; //salvare thumb -> 1 o 0
$img->AddLogo("pippo.jpg", "logo.png");
//se necessario effettuare altre operazioni sulle immagini
//$img->new_image (risorse immagine)
//$img->thumb (risorsa thumb)
?>
<?php
/*
iaTermark
Created by Silvio Rainoldi
www.ianaz.ch
*/
class img
{
var $thumb_w = 172; // larghezza thumb
var $thumb_h = 130; // altezza thumb
var $max_w = 720; // larghezza max
var $max_h = 540; // altezza max
var $pos_x = "RIGHT"; // posizione logo
var $pos_y = "BOTTOM"; // posizione logo
var $img_folder = ""; // cartella immagine grande
var $thumb_folder = ""; // cartella immagine thumb
var $saveBIG = 1; //salvare immagine grande
var $saveTHUMB = 1; //salvare thumb
var $name = ""; //nome immagine senza estensione
function AddLogo($image, $logo = NULL)
{
$this->im = $this->createImgage($image);
$this->im_width = imagesx($this->im);
$this->im_height = imagesy($this->im);
$this->wt_x = $this->calc_pos_x($this->pos_x);
$this->wt_y = $this->calc_pos_y($this->pos_y);
$this->new_image = $this->resizeImg();
$this->resizeForThumb();
if($logo != NULL)
{
$this->createTheLogo($logo);
}
if($this->name==""){
$this->name = substr($image, 0 , strrpos($image, "."));
}
if($this->saveBIG == 1)
{
imagejpeg($this->new_image, $this->img_folder.$this->name."_big.jpg");
}
if($this->saveTHUMB == 1)
{
imagejpeg($this->thumb, $this->thumb_folder.$this->name."_small.jpg");
}
}
function createImgage($image){
$type = strtolower(substr($image, strrpos($image, "."), strlen($image)-strrpos($image, ".")));
if($type==".jpeg" || $type==".jpg"){
return imagecreatefromjpeg($image);
}elseif($type==".gif"){
return imagecreatefromgif($image);
}elseif($type==".png"){
return imagecreatefrompng($image);
}else{
die("Immagine non valida");
}
}
function createTheLogo($logo)
{
$this->logo = $this->createImgage($logo);
$this->logo_width = imagesx($this->logo);
$this->logo_height = imagesy($this->logo);
$this->wt_x = $this->calc_pos_x($this->pos_x);
$this->wt_y = $this->calc_pos_y($this->pos_y);
imagecopymerge($this->new_image, $this->logo, $this->wt_x, $this->wt_y, 0, 0, $this->logo_width, $this->logo_height, 100);
}
function resizeImg()
{
if($this->im_width > $this->max_w && $this->im_height < $this->max_h)
{
$rapporto = $this->max_w / $this->im_width;
$this->new_im_w = $this->im_width * $rapporto;
$this->new_im_h = $this->im_height * $rapporto;
}
else if($this->im_width < $this->max_w && $this->im_height > $this->max_h)
{
$rapporto = $this->max_h / $this->im_height;
$this->new_im_w = $this->im_width * $rapporto;
$this->new_im_h = $this->im_height * $rapporto;
}
else if($this->im_width > $this->max_w && $this->im_height > $this->max_h)
{
$rapporto_1 = $this->max_w / $this->im_width;
$rapporto_2 = $this->max_h / $this->im_height;
if($rapporto_1 > $rapporto_2)
{
$rapporto = $rapporto_2;
}
else
{
$rapporto = $rapporto_1;
}
$this->new_im_w = $this->im_width * $rapporto;
$this->new_im_h = $this->im_height * $rapporto;
}
else
{
$this->new_im_w = $this->im_width;
$this->new_im_h = $this->im_height;
}
$this->new_image = imagecreatetruecolor($this->new_im_w, $this->new_im_h);
imagecopyresized($this->new_image, $this->im, 0, 0, 0, 0, $this->new_im_w, $this->new_im_h, $this->im_width, $this->im_height);
return $this->new_image;
}
function resizeForThumb()
{
$thumb_w = $this->thumb_w;
$thumb_h = $this->thumb_h;
if($this->im_width > $this->im_height)
{
$rapporto = $this->im_height / $this->im_width;
$thumb_h = $this->thumb_h * $rapporto;
$thumb_w = $this->thumb_w * $rapporto;
}
else if($this->im_width < $this->im_height)
{
$rapporto = $this->im_width / $this->im_height;
$thumb_w = $this->thumb_w * $rapporto;
}
else
{
$thumb_w = $this->thumb_w;
$thumb_h = $this->thumb_h;
}
$this->thumb = imagecreatetruecolor($thumb_w, $thumb_h);
imagecopyresized($this->thumb, $this->new_image, 0, 0, 0, 0, $thumb_w, $thumb_h, $this->new_im_w, $this->new_im_h);
}
function calc_pos_x($position_x)
{
$x = 0;
switch($position_x)
{
case 'LEFT':
$x = 0;
break;
case 'CENTER':
$x = @$this->new_im_w / 2 - @$this->logo_width / 2;
break;
case 'RIGHT':
$x = @$this->new_im_w - @$this->logo_width;
break;
default:
$x = 0;
}
return $x;
}
function calc_pos_y($position_y)
{
$y = 0;
switch($position_y)
{
case 'TOP':
$y = 0;
break;
case 'MIDDLE':
$y = @$this->new_im_h / 2 - @$this->logo_height / 2;
break;
case 'BOTTOM':
$y = @$this->new_im_h - @$this->logo_height;
break;
default:
$y = 0;
}
return $y;
}
}
?>
Permalink:
Tag:
Script Simili:
Script javascript: Aggiungere e rimuovere option da una select
Script php: Evitare il caricamento delle immagini da cache con htaccess
Script javascript: Ridimensionare popup come immagine contenuta
Script javascript: Anteprima immagine per upload
Link utili:
Vota:
Commenti
9/11/2006 23:55:14
Grazie per la segnalazione.
Faro' qualche test. Puo' essere magari che a volte non siano chiare le differenze tra maiuscole minuscole, tra zero e O?
10/11/2006 7:15:48
"Puo' essere magari che a volte non siano chiare le differenze tra maiuscole minuscole, tra zero e O?"
In che senso? :P
"l'immagine di convalida dà sempre errore, o quasi..."
che errore da e quando?
10/11/2006 9:10:02
Credo che Andrea parli dell'immagine di controllo per l'invio di commenti, non allo script. Tu Silvio hai avuto problemi nell'inserire commenti? Pensavo quasi di utilizzare solo le lettere alfabetiche minuscole per non dar edito a dubbi.
10/11/2006 10:57:29
Ah scusa, pensavo si riferisse alla classe.
Io non ho problemi per inserire commenti...
13/11/2006 16:56:47
Beh, di solito gli script captcha (le immagini di convalida) Tolgono del tutto le "o" o gli zeri, oppure li considerano come uguali per non permettere che l'utente si confonda...
Il mio problema, in effetti, era che due commenti non erano stati postati per un (mio? mah) errore di riscrittura, ma ora mi pare sia tutto a posto...
13/11/2006 17:14:07
Si in effetti ho eliminato i numeri e le maiuscole per dar meno adito a problemi di interpretazione. Ho mantenuto solo le minuscole, ora dovrebbe essere per lo meno più chiaro.
6/1/2007 16:25:36
Ciao a tutti,
credo che questo script sia semplicemente perfetto...
non conoscendo però bene il PHP ho problemi nel "chiamarlo"...
mi spiego, mi basta modificare il sorgente e creare un file php,
o c'è altro da fare?
tnx @
7/1/2007 20:00:12
ciao,
allora crei il file img.class.php con il contenuto dell'ultimo box.
Poi in qualunque file php tu sia inserisci:
<?
require("img.class.php");
$img = new img;
// qui tutte le opzioni che ti servono
$img->AddLogo("pippo.jpg", "logo.png");
?>
8/1/2007 0:20:08
stanotte provo allora :) con easyphp in locale
11/1/2007 17:16:19
ciao, ho provato... ecco cos'ho fatto:
- img.class.php con l'ultimo box
- prova.php
pippo.JPG e logo.png
chiamo il file prova.php e mi dice
Fatal error: Call to undefined function: imagecreatefromjpeg() in \\easyphp1-8\www\img.class.php on line 52
cos'ho cannato :DDD?
tnx @
11/1/2007 17:36:05
è probabile che di default easyphp non abbia le estensioni GD attive per l'elaborazione delle immagini.
Prova ad attivarle cosi:
- tasto destro sulla 'e' Di easyphp
- configurazione
- estensioni php
- seleziona php_gd2
- premi applica
- riavvia easyphp
20/1/2007 11:16:58
storpiato?in ke senso? cosa? l'immagine non tiene le proporzioni?
23/1/2007 6:13:47
no guarda...ho tolto il nome del sito, calcola k la img mi esce con il logo così e nn in trasparenza... adesso ho provato a farlo in c# e crea l'immagine in modo corretto, xò non riesco a regolare il canale alpha.. c riuscirò...
http://img201.imageshack.us/img201/9463/wt2error6nx.png
esce così , sarà xkè la png è a 32bit e nn 24?
ciao e grazie
25/1/2007 12:17:39
Ciao, ho provato lo script, ed è tutto molto semplice e veloce, tranne per il fatto che non mantiene la trasparenza, ossia mi aggiunge il logo (creato con uno sfondo trasparente) con uno sfondo bianco: come posso ovviare il problema!??!
25/1/2007 12:47:43
prova a sostituire nella funzione createTheLogo($logo) della classe:
imagecopymerge($this->new_image, $this->logo, $this->wt_x, $this->wt_y, 0, 0, $this->logo_width, $this->logo_height,100);
con
imagecopy($this->new_image, $this->logo, $this->wt_x, $this->wt_y, 0, 0, $this->logo_width, $this->logo_height);
dovrebbe mantenere la trasparenza.
25/1/2007 15:46:04
Ho fatto la modifica che mi hai suggerito: perfetto!
Grazie tante per la disponibilità
30/4/2007 16:44:49
Scusa io ho provato ad usare la classe ma non capisco come fare x visualizzare l'img dopo aver usato la classe per applicare il watermark, potresti indicarmi come
1/5/2007 18:35:43
L'immagine con watermark viene salvata in una cartella. Did default è la cartella in cui c'è l'immagine originale. Altrimenti con:
$img->img_folder = "public/";
si setta la cartella in cui creare l'immagine.
25/7/2007 12:08:17
Scusate: è possibile evitare di salvare l'immagine creata? Ovvero limitarsi a... generarla in RAM per la visualizzazione e basta?
Servirebbe qualche nota sul come produrre il watermark, io fino ad ora non sono ci sono riuscito con GIMP e per provare ho usato alcune PNG già pronte.
Grazie.
14/8/2007 14:38:57
ottimo script!
l'unica cosa che avrei voluto in più è ridurre proporzionalmente anche le dimensioni della thumb. A dire il vero, ho notato che se un'immagine ha H > di W la thumb viene proporzionata. Se invece H < W allora crea un quadrato perfetto delle dimensioni dichiarate.
E' vero o forse ho impostato male qualcosa?

Feed Rss
9/11/2006 22:37:16
Molto utile! Questo me lo segno...
P.S. l'immagine di convalida dà sempre errore, o quasi...