2015-11-06 13 views
7

nel mio progetto faccio solo watermarking immagine immagine o combina sta funzionando bene e codice per questo.manipolazione immagine larghezza e altezza impostazione

<!DOCTYPE html> 
<html> 
<head> 
<title>test</title> 
</head> 
<body> 
<?php 
if(isset($_POST['submit'])) 
{ 
// Give the Complete Path of the folder where you want to save the image  
$folder="uploads/"; 
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], "$folder".$_FILES["fileToUpload"]["name"]); 
$file='uploads/'.$_FILES["fileToUpload"]["name"]; 

$uploadimage=$folder.$_FILES["fileToUpload"]["name"]; 
$newname= time(); 

$ext = pathinfo($_FILES["fileToUpload"]["name"], PATHINFO_EXTENSION); 

// Set the thumbnail name 
$thumbnail = $folder.$newname.".".$ext; 
$imgname=$newname.".".$ext; 

// Load the mian image 
if ($ext=="png" || $ext=="PNG") { 
$source = imagecreatefrompng($uploadimage); 
} 
else if ($ext=="gif" || $ext=="GIF") { 
$source = imagecreatefromgif($uploadimage); 
} 
else if ($ext=="bmp" || $ext=="BMP") { 
$source = imagecreatefrombmp($uploadimage); 
} 
else{ 
$source = imagecreatefromjpeg($uploadimage); 
} 

// load the image you want to you want to be watermarked 
$watermark = imagecreatefrompng('uploads/logo1.png'); 

// get the width and height of the watermark image 
$water_width = imagesx($source)/2; 
$water_height = imagesy($watermark); 

// get the width and height of the main image image 
$main_width = imagesx($source); 
$main_height = imagesy($source); 

$im_middle_w = $main_width/2; 
$im_middle_h = $main_height/2; 

// Set the dimension of the area you want to place your watermark we use 0 
// from x-axis and 0 from y-axis 
$dime_x = $im_middle_w - $water_width/2; 
$dime_y = $im_middle_h - $water_height/2; 

// copy both the images 
imagecopy($source, $watermark, $dime_x, $dime_y, 0, 0, $water_width, $water_height); 

// Final processing Creating The Image 
imagejpeg($source, $thumbnail, 100); 
unlink($file); 
} 
?> 
<img src='uploads/<?php echo $imgname;?>'> 
</body> 
</html> 

ma il problema con l'impostazione $ water_width e voglio impostare come metà della mia immagine di origine. ma quando ho l'immagine sorgente di larghezza o larghezza inferiore rispetto a $ water_width è impostato in questo modo. vedere l'immagine quando la larghezza dell'immagine sorgente è maggiore.

enter image description here e quando la larghezza è inferiore. enter image description here quindi il mio problema è come impostare $ water_width come metà della larghezza dell'immagine sorgente?

di Alex la tua risposta è arrivata così. enter image description here

+0

Cosa ti serve come marchio d'acqua ?. ** www.domain.com ** ?? @divyesh –

+0

sì.una frase senza sfondo nero come l'ultima immagine in questione. –

+0

Penso che tu possa usare 'imagettftext'. Controlla la mia risposta. @Divyesh –

risposta

7

Ciò ridimensiona filigrana a metà larghezza dell'immagine originale e metterlo al centro:

// load the image you want to you want to be watermarked 
$watermark = imagecreatefrompng('uploads/logo1.png'); 

// get the width and height of the watermark image 
$water_width = imagesx($watermark); 
$water_height = imagesy($watermark); 

// get the width and height of the main image image 
$main_width = imagesx($source); 
$main_height = imagesy($source); 

// resize watermark to half-width of the image 
$new_height = round($water_height * $main_width/$water_width/2); 
$new_width = round($main_width/2); 
$new_watermark = imagecreatetruecolor($new_width, $new_height); 
// keep transparent background 
imagealphablending($new_watermark, false); 
imagesavealpha($new_watermark, true); 

imagecopyresampled($new_watermark, $watermark, 0, 0, 0, 0, $new_width, $new_height, $water_width, $water_height); 

// Set the dimension of the area you want to place your watermark we use 0 
// from x-axis and 0 from y-axis 
$dime_x = round(($main_width - $new_width)/2); 
$dime_y = round(($main_height - $new_height)/2); 

// copy both the images 
imagecopy($source, $new_watermark, $dime_x, $dime_y, 0, 0, $new_width, $new_height); 

// Final processing Creating The Image 
imagejpeg($source, $thumbnail, 100); 

imagedestroy($source); 
imagedestroy($watermark); 
imagedestroy($new_watermark); 
+0

mostro un'immagine usando la tua risposta è sfondo nero display ... come fare come altra immagine in questione? –

+0

@DivyeshJesadiya, Ho modificato la risposta per preservare il canale alfa nella filigrana. Come nota a margine, è stata data risposta alla domanda di trasparenza più volte. per esempio. http://stackoverflow.com/questions/32243/can-png-image-transparency-be-preserved-when-using-phps-gdlib-imagecopyresample. –

3

si può provare imagettftext metodo, se non si vuole alcuna così alta perfezione in trasparenza. Puoi provare questo codice. Devi salvare un file di font nella tua directory, qui ho usato arial.ttf.

$im = imagecreatefrompng("png.png"); //create image data 
$font = 'arial.ttf'; //font file name 
$randomString = "example.com"; //string need to be shown 
$main_width = imagesx($im);  //finding width and height 
$main_height = imagesy($im);  
$posx= $main_width/2; //finding center 
$posy = $main_height/2; 
$color = imagecolorallocate($im, 200, 200, 200); //Creating color 
$size = ($main_width/25)+1;  //determine size of font. +1 to avoid 0 
$temp = $size*5;  
$posx = $posx-$temp; //adjust to average center 
imagettftext($im,$size,0, $posx, $posy, $color, $font , $randomString); //apply a text 

è necessario regolare posx e posy per la vostra posizione del testo. Size può anche essere regolato con alcune logiche.

$color = imagecolorallocate($im, 0, 0, 0); = nero

e $color = imagecolorallocate($im, 255, 255, 255); = bianco.

È necessario regolare questo per il colore del testo richiesto.

Problemi correlati