2015-11-06 74 views
7

在我的项目中,我只是做图像水印或图像结合它的工作正常和代码。图像处理宽度和高度设置

<!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> 

但设置$ water_width问题,我想设置为我的源图像的一半。但是当我有更少的宽度或更宽的源图像相比$ water_width它设置它像那样。当源图像宽度更大时,请参阅图像。

enter image description here 当宽度较小时。 enter image description here 所以我的问题是如何设置$ water_width作为源图像宽度的一半?

作者:Alex您的回答是这样的。 enter image description here

+0

你需要什么作为水印? ** www.domain.com ** ?? @divyesh –

+0

yes.any没有黑色背景的句子,如上一张图片。 –

+0

我想你可以使用'imagettftext'。检查我的答案。 @Divyesh –

回答

7

这将调整水印原始图像的一半宽度,把它放在中心:

// 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

我用你的答案显示图像显示黑色背景...如何做到这一点作为其他图像的问题? –

+0

@DivyeshJesadiya,我修改了答案以保留水印中的alpha通道。作为一个侧面说明,透明度问题已被多次回答。例如http://stackoverflow.com/questions/32243/can-png-image-transparency-be-preserved-when-using-phps-gdlib-imagecopyresample。 –

3

你可以试试imagettftext方法,如果你不想在任何透明度这么高的完美。你可以试试这段代码。你必须在你的目录中保存一个字体文件,在这里我使用了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 

你必须调整posxposy为您的文本的位置。 Size也可以用一些逻辑进行调整。

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

$color = imagecolorallocate($im, 255, 255, 255); =白色。

你必须调整为你需要的文字颜色。

相关问题