واترمارک روی عکس از روش های جالب برای محافظت از عکس های دیجیتال در برابر کپی و دزدی در سطح اینترنت است . توسط php می توانیم واترمارک روی عکس قرار بدیم . ما از یک عکس png که پس زمینه شفاف(transparent) دارد ، استفاده می کنیم و بعد آن را بروی تصویر دلخواه قرار می دهیم.
در بیشتر موارد افراد دوست دارند که عکس آپلود شده توسط فرم html را تغییر اندازه بدهند و بعد بر روی آن واترمارک قرار بدهند . پس در این مقاله نیر ما دقیقا همین کار را انجام میدهیم..
خب اول از همه برای ایجاد فرم html آپلود از کد زیر استفاده می کنیم
1 2 3 4 |
<form action="" id="upload-form" method="post" enctype="multipart/form-data"> <input type="file" name="image_file" /> <input type="submit" value="Send Image" /> </form> |
استفاده از تابع imagecopy()
تابع imagecopy() تصویر watermark را بر روی مقصدی که بر روی تصویر آپلود شده تعیین کردیم انتقال میدهیم. پس اساسا ما عکس آپلود شده را با تصویر واترمارک ترکیب و کپی می کنیم.
نگاهی به کد زیر بیاندازیم . اول از همه مرکز یا همان وسط عکس واترمارک را توسط طول و عرض عکس محاسبه میکنیم . سپس با تابع imagecopy() هر دو تصویر را با هم ادغام میکنیم.
1 2 3 4 5 6 7 8 9 10 11 12 |
//path to destination image $destination_image = imagecreatefromjpeg('PATH/TO/DESTINATION/JPEG/FILE'); //path to watermark image $watermark = imagecreatefrompng('PATH/TO/WATERMARK/PNG/FILE'); //calculate center position of watermark image $watermark_left = (DST_IMAGE_WIDTH/2)-(WATERMARK_WIDTH/2); //watermark left $watermark_bottom = (DST_IMAGE_HEIGHT/2)-(WATERMARK_HEIGHT/2); //watermark bottom //use PHP imagecopy() to merge two images. imagecopy($destination_image, $watermark, $watermark_left, $watermark_bottom, 0, 0, WATERMARK_WIDTH, WATERMARK_HEIGHT); //merge image |
اسکریپت کامل قرار دادن واترمارک روی عکس
اگر کد بالا برای شما خوانا بوده ، پس به کد کامل زیر هم نگاهی بیاندازید . در کد php زیر ما از تابع imagecopy() بعد از تغییر اندازه (resize) استفاده کردیم .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
if(isset($_FILES['image_file'])) { $max_size = 800; //max image size in Pixels $destination_folder = 'path/to/upload/folder'; $watermark_png_file = 'watermark.png'; //path to watermark image $image_name = $_FILES['image_file']['name']; //file name $image_size = $_FILES['image_file']['size']; //file size $image_temp = $_FILES['image_file']['tmp_name']; //file temp $image_type = $_FILES['image_file']['type']; //file type switch(strtolower($image_type)){ //determine uploaded image type //Create new image from file case 'image/png': $image_resource = imagecreatefrompng($image_temp); break; case 'image/gif': $image_resource = imagecreatefromgif($image_temp); break; case 'image/jpeg': case 'image/pjpeg': $image_resource = imagecreatefromjpeg($image_temp); break; default: $image_resource = false; } if($image_resource){ //Copy and resize part of an image with resampling list($img_width, $img_height) = getimagesize($image_temp); //Construct a proportional size of new image $image_scale = min($max_size / $img_width, $max_size / $img_height); $new_image_width = ceil($image_scale * $img_width); $new_image_height = ceil($image_scale * $img_height); $new_canvas = imagecreatetruecolor($new_image_width , $new_image_height); //Resize image with new height and width if(imagecopyresampled($new_canvas, $image_resource , 0, 0, 0, 0, $new_image_width, $new_image_height, $img_width, $img_height)) { if(!is_dir($destination_folder)){ mkdir($destination_folder);//create dir if it doesn't exist } //calculate center position of watermark image $watermark_left = ($new_image_width/2)-(300/2); //watermark left $watermark_bottom = ($new_image_height/2)-(100/2); //watermark bottom $watermark = imagecreatefrompng($watermark_png_file); //watermark image //use PHP imagecopy() to merge two images. imagecopy($new_canvas, $watermark, $watermark_left, $watermark_bottom, 0, 0, 300, 100); //merge image //output image direcly on the browser. header('Content-Type: image/jpeg'); imagejpeg($new_canvas, NULL , 90); //Or Save image to the folder //imagejpeg($new_canvas, $destination_folder.'/'.$image_name , 90); //free up memory imagedestroy($new_canvas); imagedestroy($image_resource); die(); } } } |
امیدوارم مفید بوده باشه و این کد کاربردی را در پروژه هایی که می نویسید استفاده کنید
موفق باشید
بسیار عالیی
سلام ببخشید میشه یه راهنمایی کنید چطور بدون استفاده از کتاب خانه ی gd در php یک متن را با عکس ادغام کنم ممنون
سلام. باید از کتابخانه استفاده کنید
چطوی میشه سایز عکس و سایز لوگو رو توی کد تغییر داد ؟
سلام. از خط ۳۲ تا ۳۵ سایز تصاویر را میتونید تغییر بدید