我需要创建水印,然后将其应用到图片上并以其他名称保存。当前的脚本运行良好,但是唯一的问题是我需要增加“示例文本”的大小并将背景从black更改为white。我尝试了不同的方案,更改了不透明度,但仍然无法更改背景色。
function watermark($imag_path, $photo_id) {
// Load the stamp and the photo to apply the watermark to
$im = imagecreatefromjpeg("$imag_path");
echo "imag_path is $imag_path and photoid is $photo_id";
// First we create our stamp image manually from GD
$stamp = imagecreatetruecolor(490, 20);
//$im = imagecreatefromjpeg("$photo_id");
imagestring($stamp, 5, 20, 2, 'sample text', 0xff0000);
// Set the margins for the stamp and get the height/width of the stamp image
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
// Merge the stamp onto our photo with an opacity (transparency) of 100%
imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 100);
$new_photo_id = $photo_id . "sample.JPG";
// Save the image to file and free memory
imagejpeg($im, "tmp/$new_photo_id");
imagedestroy($im);
}
为什么要使用邮票?我在一个网站上使用以下代码:
$im = imagecreatefromjpeg($path);
function shadow_text($im, $size, $x, $y, $font, $text)
{
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);
imagettftext($im, $size, 0, $x + 1, $y + 1, $black, $font, $text);
imagettftext($im, $size, 0, $x + 0, $y + 1, $black, $font, $text);
imagettftext($im, $size, 0, $x + 0, $y + 0, $white, $font, $text);
}
$font = '../fonts/verdana.ttf';
$size = 11;
# calculate maximum height of a character
$bbox = imagettfbbox($size, 0, $font, 'ky');
$x = 8; $y = 8 - $bbox[5];
$text = 'text to be added';
shadow_text($im, $size, $x, $y, $font, $text);
header("Content-Type: image/jpeg");
imagejpeg($im, null, 90);
此代码的运行速度足够快,我们可以使用它在下载时将动态标签动态添加到照片部分的照片中,而不是将其保存到磁盘中。
在我的代码中,我修复了一些常见错误,例如:
1)水印文本超出图像范围。
2)PNG和JPG图片错误。
所以我计算图像宽度并确定字体大小。所以字体大小是动态的。
所以您可以复制我的方法,然后粘贴到要使用的位置。
function waterMark($SourceFile,$ext='png',$WaterMarkText)
{
if( $ext == "jpg" or $ext == 'jpeg')
$image = imagecreatefromjpeg($SourceFile);
else
$image = imagecreatefrompng($SourceFile);
list($width, $height) = getimagesize($SourceFile);
$font = public_path('fonts/arial.ttf');
$size = $width*4/100; // calculating font size based on image width.
# calculate maximum height of a character
$bbox = imagettfbbox($size, 0, $font, 'ky');
$x = 8; $y = 8 - $bbox[5];
$black = imagecolorallocate($image, 0, 0, 0);
$white = imagecolorallocate($image, 255, 255, 255);
imagettftext($image, $size, 0, $x + 1, $y + 1, $black, $font, $WaterMarkText);
imagettftext($image, $size, 0, $x + 0, $y + 1, $black, $font, $WaterMarkText);
imagettftext($image, $size, 0, $x + 0, $y + 0, $white, $font, $WaterMarkText);
//header("Content-Type: image/jpeg");
// imagejpeg($image, null, 90);
if ($SourceFile <> '') {
imagejpeg ($image, $SourceFile, 100);
} else {
header('Content-Type: image/jpeg');
imagejpeg($image, null, 100);
};
imagedestroy($image);
return 1; // you can remove it...
}