我有这个用水印上传图片的代码。代码工作正常,但水印功能重新调整上传到小宽度和高度的所有图像。我想在添加水印后保留大小。我相信问题在于功能,但我不知道如何解决它。
if(isset($_FILES)){
$file = $_FILES['image'];
$allowedExts = array('jpg','png','gif','jpeg');
$uploadsDirectory = "imgupload/";
$maxSize = 2000000;
for($i = 0; $i < count($file['name']); $i++){
$filetmpname = $file['tmp_name'][$i];
$errors = array();
$filename = $file['name'][$i];
$filetext = strtolower(end(explode('.',$filename)));
$filesize = $file['size'][$i];
$filetmpname = $file['tmp_name'][$i];
if(in_array($filetext, $allowedExts) === FALSE){
$errors[] = "Extension is not allowed";
}
if($filesize > $maxSize){
$errors[] = "File Size must be less than {$maxSize} KB";
}
if(empty($errors)){
$random = rand(0,199);
$destination = $file['name'][$i] = $uploadsDirectory. $random."_".date("d-m-Y") . "_" . $file['name'][$i];
$upload_status = move_uploaded_file($filetmpname, $destination);
if($upload_status){
$new_name = $uploadsDirectory.$random."_".date("d-m-Y") . "_" .".jpg";
if(watermark_image($destination, $new_name))
$demo_image = $new_name;
}
}
}
}
水印功能:
$image_path = "images/water.png";
function watermark_image($oldimage_name, $new_image_name)
{
global $image_path;
list($owidth,$oheight) = getimagesize($oldimage_name);
$width = $height = 300;
$im = imagecreatetruecolor($width, $height);
$img_src = imagecreatefromjpeg($oldimage_name);
imagecopyresampled($im, $img_src, 0, 0, 0, 0, $width, $height, $owidth, $oheight);
$watermark = imagecreatefrompng($image_path);
list($w_width, $w_height) = getimagesize($image_path);
$pos_x = $width - $w_width;
$pos_y = $height - $w_height;
imagecopy($im, $watermark, $pos_x, $pos_y, 0, 0, $w_width, $w_height);
imagejpeg($im, $new_image_name, 100);
imagedestroy($im);
unlink($oldimage_name);
return true;
}
答案 0 :(得分:3)
您将获得现有图片的大小:
list($owidth,$oheight) = getimagesize($oldimage_name);
$width = $height = 300;
这是制作不同尺寸图像的地方:
imagecopyresampled($im, $img_src, 0, 0, 0, 0, $width, $height, $owidth, $oheight);