PDA

View Full Version : سوال: چرا موقع مرج كردن دو تصوير با GD كيفيت تصوير پايين مياد ؟



vahidmoghadam
یک شنبه 17 مرداد 1389, 10:18 صبح
سلام دوستان عزيز

من با استفاده از قطعه كد زير دو تصوير GD رو merge ميكنم اين قطعه كد رو هم از بخش آموزش php.net برداشتم. و كارش اينه كه لوگو يا تصويري رو بندازه رو تصوير اصلي يعني واترمارك بزنه رو تصوير. ولي متاسفانه نتيجه كار و تصوير خروجي كه داره كيفيتش مياد پايين و انگار فايل JPG رو كمپرس ميكنه و عكس به قول معروف رنجه ميشه و كمي پيكسل هاش ميزنه بيرون. اساتيد كد بهتري براي اينكار سراغ دارن ؟ يا اينكه همين كد رو چه طور ميشه تغيير داد تا كيفيت پايين نياد؟ ممنون


<?php
$logo_file = "22.png";
$image_file = "3.jpg";
$targetfile = "_3_.jpg";
$photo = imagecreatefromjpeg($image_file);
$fotoW = imagesx($photo);
$fotoH = imagesy($photo);
$logoImage = imagecreatefrompng($logo_file);
$logoW = imagesx($logoImage);
$logoH = imagesy($logoImage);
$photoFrame = imagecreatetruecolor($fotoW,$fotoH);
$dest_x = $fotoW - $logoW;
$dest_y = $fotoH - $logoH;
imagecopyresampled($photoFrame, $photo, 0, 0, 0, 0, $fotoW, $fotoH, $fotoW, $fotoH);
imagecopy($photoFrame, $logoImage, $dest_x, $dest_y, 0, 0, $logoW, $logoH);
imagejpeg($photoFrame, $targetfile);
echo '<img src="'.$targetfile.'" />';
?>

yasgig
یک شنبه 17 مرداد 1389, 11:28 صبح
دقیقا من هم از این کد استفاده می کنم ولی اصلا اینجوری نیست.لوگو و عکسی که درست میشه رو واستون میزارم تا ببینین
لوگو (http://www.yasgig.ir/jarayed/images/logo_larg.gif)
عکس تازه (http://www.yasgig.ir/jarayed/images/11_larg.jpg)

vahidmoghadam
یک شنبه 17 مرداد 1389, 11:38 صبح
ممنون از پاسخگويي

دوست عزيز منظورم بنده يه مقدار كمي از رنجه شدن هست ، در تصويري هم كه شما قرار داديد مقدار كمي پيكسل ها بيرون زدن يا همون اصطلاحا رنجه شدن كه حالا نميدونم تصوير اصلي همينطور بوده يا اين اسكريپت به اين صورت اونو درآورده

yasgig
یک شنبه 17 مرداد 1389, 11:53 صبح
عکس اصلی اینه
http://www.ghatreh.com/pishkhan/data/11_larg.jpg

vahidmoghadam
یک شنبه 17 مرداد 1389, 12:55 عصر
دوست عزيز بازم ممنون از پاسخگويي

اگه دوتا عكس رو كنار هم باز كني ميبيني كه عكسي كه شما واترمارك زديد با اين اسكريپت كمي تفاوت رنگ پيدا كرده و رنجه شده يعني اگر تو نوشته هاي قرمز بالاي صفحه مخصوصا اسم خبر ورزشي نگاه كني ميبيني كه رنگ قرمز كمي تيره تر شده و كمي پيكسل پيكسل شده (البته خيلي كم بايد دقت زيادي كنيد تا ببينيد)

yasgig
یک شنبه 17 مرداد 1389, 13:02 عصر
درسته.تا حالا بهش توجه نکرده بودم.چون خیلی واسم مهم نیست.ولی اگه دوستان میدونن چجوری میشه کیفیت رو بالا برد بگن تا ما هم درستش کنیم.

rapidpich
یک شنبه 17 مرداد 1389, 15:06 عصر
اگه دوتا عكس رو كنار هم باز كني ميبيني كه عكسي كه شما واترمارك زديد با اين اسكريپت كمي تفاوت رنگ پيدا كرده...

شما خلبانی؟

vahidmoghadam
یک شنبه 17 مرداد 1389, 15:19 عصر
:لبخند: چه طور ؟

من خلبان نيستم ولي عكاس خبري و هواپيمايي هستم و سر و كارم و رفاقتم با خلبانها زياده.

اين مساله كه عرض كردم خدمتتون براي واترمارك كردن اتومات عكسهاي ارسالي به پايگاه عكس صنعت هواپيمايي كشور از طرف بقيه عكاسها ميخوام استفاده كنم و اين اسكريپت باعث ميشه كيفيت عكسهاشون كمي پايين بياد و ناچارا بايد روزي چندين عكس رو با فتوشاپ واترمارك بزنيم.

شما راهي براي بهبود اين اسكريپت سراغ داريد ؟

rapidpich
دوشنبه 18 مرداد 1389, 13:50 عصر
والا ما یه رفیق داشتیم خلبانی که میرفت گفت یه عالمه امتحان چشم میگیرن اگه یکم (فقط یکم ) ضعیف باشی ردی!
من اول که شما گفتی این 2 تا عکس فرق میکنه تو 2 تا تب وا کردم هرچی جابجا کردم فرقی نمیکرد! بعد 10 بار که اینکارو کردم دیدم زرد اینور یکمی روشنتر از زرد اونوره! یاد رفیقم و حرفش افتادم!

من احتمال میدم این سیستم کیفیت عکسارو میاره رو عکس کمتر. برا همین شاید باید از یک واترمارک با کیفیت خیلی بالا استفاده کنی. فکر میکنم TIFF یا png بهتر باشن.
در کل زیاد تو کار عکس با php نیستم!

vahidmoghadam
دوشنبه 18 مرداد 1389, 14:32 عصر
جسارتا ميتونم اسم دوستتون رو بدونم؟ الان خلبان كدوم شركت هستن؟

واترمارك من كه روي عكس اصلي قرار ميگيره png هست كه هم با عمق رنگ 8 بيت و با عمق رنگ 24 بيت امتحان كردم كه هر دو افت كيفيت رو دارن.

m0h53n
دوشنبه 18 مرداد 1389, 16:32 عصر
سلام
میتونی با کد زیر کیفیت تصویر رو به نسبت قابل توجهی بالا ببری!


imagejpeg($photoFrame, $targetfile,100);

vahidmoghadam
دوشنبه 18 مرداد 1389, 18:53 عصر
آقا واقعا ممنونم

اين يه پارامتر ما رو بيچاره كرد البته اشتباه از خودم بوده كه راهنماي اين تابع رو از توي سايت php به دقت نخوندم

ولي به هر حال ممنون از راهنمايي بزرگتون

rapidpich
سه شنبه 19 مرداد 1389, 08:50 صبح
یعنی مشکل همین بود؟ یعنی این تابع بدون مقدار کیفیت رو میاورد پایین؟

yasgig
سه شنبه 19 مرداد 1389, 10:03 صبح
آره داداش.الان من این کارو کردم و کیفیتش با اولی یکسان شد
عکسه اولیه (http://www.ghatreh.com/pishkhan/data/11_larg.jpg)
عکس ثانویه (http://www.ghatreh.com/pishkhan/data/11_larg.jpg)

vahidmoghadam
سه شنبه 19 مرداد 1389, 16:14 عصر
بله دقيقا

اين تابع پارامتر سومش به طور پيش فرض مقدارش 80 هست و اين يعني 20% افت كيفيت عكس نسبت به عكس اصلي و اگر اون عدد رو شما روي 100 مقدار دهي كني ديگه اين 20% افت كيفيت از بين ميره