我正在尝试在上传时为图片添加水印。
我有一个多上传脚本,可以正常工作,见下文:
GET
是否可以为使用我的脚本上传的所有图像添加水印?
答案 0 :(得分:2)
关闭主题,但已请求,希望它有助于某人从mysql_*
到PDO
。 bindParam的PDO手册页,至少指向某个地方。
create table commerce_images
( `id` int auto_increment primary key,
`USER_ID` int not null,
`FILE_NAME` varchar(123) not null,
`FILE_SIZE` int not null,
`FILE_TYPE` int not null,
`added_by` varchar(100),
`gallery_id` int not null,
`sub_gallery_id` int not null
);
<?php
// Begin Vault (this is in a vault, not actually hard-coded)
$host="localhost";
$username="GuySmiley";
$password="anchovies_¿^?fish╔&®";
$dbname="so_gibberish";
// End Vault
try {
$dbh = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$user=456;
$file_name="/path";
$file_size=29832;
$file_type=3;
$Fname="Kim";
$Sname="Billings";
$gallery=35;
$album=9;
$FullName="$Fname $Sname";
// prepared statement with named placeholders for sanity of not using index values of placeholders
$stmt = $dbh->prepare("INSERT into commerce_images (`USER_ID`,`FILE_NAME`,`FILE_SIZE`,`FILE_TYPE`, `added_by`, `gallery_id`, `sub_gallery_id`)
VALUES(:user,:file_name,:file_size,:file_type,:FullName,:gallery,:album)");
$stmt->bindParam(':user', $user, PDO::PARAM_INT); // correct this datatype
$stmt->bindParam(':file_name', $file_name, PDO::PARAM_STR,123); // size it
$stmt->bindParam(':file_size', $file_size, PDO::PARAM_INT);
$stmt->bindParam(':file_type', $file_type, PDO::PARAM_INT); // correct this datatype
$stmt->bindParam(':FullName', $FullName, PDO::PARAM_STR,123); // size it
$stmt->bindParam(':gallery', $gallery, PDO::PARAM_INT); // correct this datatype
$stmt->bindParam(':album', $album, PDO::PARAM_INT); // correct this datatype
$stmt->execute();
$stmt = null;
// PDO closes connection at end of script
} catch (PDOException $e) {
echo 'PDO Exception: ' . $e->getMessage();
exit();
}
?>
select * from commerce_images;
+----+---------+-----------+-----------+-----------+--------------+------------+----------------+
| id | USER_ID | FILE_NAME | FILE_SIZE | FILE_TYPE | added_by | gallery_id | sub_gallery_id |
+----+---------+-----------+-----------+-----------+--------------+------------+----------------+
| 1 | 456 | /path | 29832 | 3 | Kim Billings | 35 | 9 |
+----+---------+-----------+-----------+-----------+--------------+------------+----------------+
答案 1 :(得分:1)
虽然OP的问题在确切的水印方法上并不清楚,但我在这里使用GD库显示了文本和图像水印功能。
将文字添加为水印(使用TTF字体): Gist
function add_text_watermark($kep,$Text,$WatermarkNeeded = 1) {
list($img_type, $Image) = getImage($kep);
$sx = imagesx($Image) ;
$sy = imagesy($Image) ;
if ($WatermarkNeeded)
{
/* Set the font */
$Font="_arial.ttf";
$FontColor = ImageColorAllocate ($Image,204,204,204) ;
$FontShadow = ImageColorAllocate ($Image,100,100,100) ;
$Rotation = 0 ;
/* Make a copy image */
$OriginalImage = ImageCreateTrueColor($sx,$sy) ;
ImageCopy ($OriginalImage,$Image,0,0,0,0,$sx,$sy) ;
/* Iterate to get the size up */
$FontSize=1 ;
do
{
$FontSize *= 1.1 ;
$Box = @ImageTTFBBox($FontSize,0,$Font,$Text);
$TextWidth = abs($Box[4] - $Box[0]) ;
$TextHeight = abs($Box[5] - $Box[1]) ;
}
while ($TextWidth < $sx*0.9 && $FontSize < 30) ;
/* Awkward maths to get the origin of the text in the right place */
$x = $sx/2 - cos(deg2rad($Rotation))*$TextWidth/2 ;
$y = $sy/2 + sin(deg2rad($Rotation))*$TextWidth/2 + cos(deg2rad($Rotation))*$TextHeight/2 ;
/* Make shadow text first followed by solid text */
ImageTTFText ($Image,$FontSize,$Rotation,$x+1,$y+1,$FontShadow,$Font,$Text);
ImageTTFText ($Image,$FontSize,$Rotation,$x,$y,$FontColor,$Font,$Text);
/* merge original image into version with text to show image through text */
ImageCopyMerge ($Image,$OriginalImage,0,0,0,0,$sx,$sy,50) ;
imagejpeg($Image, $kep, 100);
}
}
function getImage($res) {
$img = "";
$type = "";
if (intval(@imagesx($res)) > 0) {
$img = $res;
} else {
$imginfo = getimagesize($res);
switch($imginfo[2]) { // Determine type
case 1:
$type = "GIF";
if (function_exists("imagecreatefromgif")) {
$img = imagecreatefromgif($res);
} else {
die("Unsupported image type: $type");
}
break;
case 2:
$type = "JPG";
if (function_exists("imagecreatefromjpeg")) {
$img = imagecreatefromjpeg($res);
} else {
die("Unsupported image type: $type");
}
break;
case 3:
$type = "PNG";
if (function_exists("imagecreatefrompng")) {
$img = imagecreatefrompng($res);
} else {
die("Unsupported image type: $type");
}
break;
}
}
return array($type, $img);
}
编辑:确保您尝试添加为水印文字的ttf字体文件可以看到路径!
将图片添加为水印: Gist
function generate_watermarked_image($originalFileContents, $originalWidth, $originalHeight, $paddingFromBottomRight = 0, $watermarkFileLocation = 'logo.png') {
$watermarkImage = imagecreatefrompng($watermarkFileLocation);
$watermarkWidth = imagesx($watermarkImage);
$watermarkHeight = imagesy($watermarkImage);
$originalImage = imagecreatefromstring($originalFileContents);
$destX = $originalWidth - $watermarkWidth - $paddingFromBottomRight;
$destY = $originalHeight - $watermarkHeight - $paddingFromBottomRight;
// creating a cut resource
$cut = imagecreatetruecolor($watermarkWidth, $watermarkHeight);
// copying that section of the background to the cut
imagecopy($cut, $originalImage, 0, 0, $destX, $destY, $watermarkWidth, $watermarkHeight);
// placing the watermark now
imagecopy($cut, $watermarkImage, 0, 0, 0, 0, $watermarkWidth, $watermarkHeight);
// merging both of the images
imagecopymerge($originalImage, $cut, $destX, $destY, 0, 0, $watermarkWidth, $watermarkHeight, 100);
return $originalImage;
}
您可以将其命名为:
$Image = "$desired_dir/".$file_name;
imagejpeg(generate_watermarked_image(file_get_contents($Image), imagesx($Image), imagesy($Image), 10), $Image."-watermarked.jpg", 100);
编辑:确保logo.png或您尝试添加为水印的任何文件都可以看到路径!