PDA

View Full Version : حرفه ای: چرا تصاویر واترمارک که با این کد ایجاد می کنم کیفیت نداره؟



i-php-i
چهارشنبه 11 تیر 1393, 10:54 صبح
از این کد برای ایجاد واترمارک استفاده می کنم. اگر تصویر اصلی jpeg باشه توابع مربوطه یه تصویر با کیفیت ایجاد می کنن ولی اگر تصویر اصلی از فرمت gif یا png باشه تصویر ایجاد شده کیفیت نداره.

بغیر از این مسئله نمی تونم که چطور باید opacity لوگو سایت رو کاهش بدم. لطفا در این مورد هم راهنمایی کنید.

کد ایجاد واتر مارک :

$stamp = imagecreatefrompng('wm.png');
//$im = imagecreatefromjpeg('main.jpg');
$im = imagecreatefrompng('main.png');
$save_watermark_photo_address = 'newfile.png';

// Set the margins for the stamp and get the height/width of the stamp image

$marge_right = 0;
$marge_bottom = 0;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

// Copy the stamp image onto our photo using the margin offsets and the photo
// width to calculate positioning of the stamp.

imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

// Output and free memory
// header('Content-type: image/png');

//imagejpeg($im, $save_watermark_photo_address, 100);
imagepng($im, $save_watermark_photo_address);

Unique
چهارشنبه 11 تیر 1393, 12:41 عصر
شما مطمئن هستید کیفیت عکس های اصلی خوبه و از imagejpeg بدون پارامتر quality استفاده نمیکنید ؟ اگه imagejpeg بود میگفتم بگذارین 100 (که البته توی کد هستش) تا بهترین کیفیت را بگیرین اما در مورد imagepng که quality مقدار ۹-۰ داره اصلا تاثیری در کیفیت نداره و روی compression و زمان تاثیر داره و همون compresseion level مربوط به zlib میشه.

پس احتمالا مشکل از کیفیت پایین عکس های خودتونه ! یکبار comment ها را برررسی کنی و عکس ها را هم بررسی کنید و خروجی بگیرین.

i-php-i
چهارشنبه 11 تیر 1393, 13:38 عصر
imagejpeg مشکلی نداره توابع مربوط به فرمت png و gif تصویر با کیفیت پایین ایجاد می کنن

تصویر اصلی کیفیتش مناسبه

metal gear solid 4
چهارشنبه 11 تیر 1393, 15:13 عصر
عدد کیفیت png رو باید بین 0 تا 9 بدید.

i-php-i
چهارشنبه 11 تیر 1393, 15:29 عصر
کیفیتش رو روی 9 هم گذاشتم ولی تفاوتی نکرد

metal gear solid 4
چهارشنبه 11 تیر 1393, 17:43 عصر
اگر منظورتون اینه تصاویر png رو به صورت transparent ذخیره نمیکنه باید imagealphablendingتصویرتون رو برابر true قرارر بدید

Gd png transparency. رو توی گوگل جستجو کنید

i-php-i
چهارشنبه 11 تیر 1393, 23:02 عصر
مشکل اصلی اینه که فایل جدید رو با کیفیت مناسب ذخیره نمی کنه، نمی دونید این مشکل رو چطور باید حل کنم؟

Unique
چهارشنبه 11 تیر 1393, 23:26 عصر
عدد کیفیت png رو باید بین 0 تا 9 بدید.
عدد quality مربوط به imagepng ربطی به کیفیت عکس نداره و روی compression تاثیر داره. اما برای imagejpeg مربوط به کیفیت میشه !


مشکل اصلی اینه که فایل جدید رو با کیفیت مناسب ذخیره نمی کنه، نمی دونید این مشکل رو چطور باید حل کنم؟
میشه خروجی imagejpeg و imagepng را هر دو را ضمیمه کنین ؟

i-php-i
پنج شنبه 12 تیر 1393, 03:07 صبح
عدد quality مربوط به imagepng ربطی به کیفیت عکس نداره و روی compression تاثیر داره. اما برای imagejpeg مربوط به کیفیت میشه !


میشه خروجی imagejpeg و imagepng را هر دو را ضمیمه کنین ؟



اینترنت کند بود نشد آپلود کنم ولی سعی می کنم فردا آپلود کنم، کلا اگر یه متن با فونت بزرگ توی تصویر باشه متن رو به هم می ریزه طوری که نشه خوندش

کد آماده برای این کار ندارید کار من راه بیافته؟

i-php-i
پنج شنبه 12 تیر 1393, 08:32 صبح
اینترنت کند بود نشد آپلود کنم ولی سعی می کنم فردا آپلود کنم، کلا اگر یه متن با فونت بزرگ توی تصویر باشه متن رو به هم می ریزه طوری که نشه خوندش

کد آماده برای این کار ندارید کار من راه بیافته؟

این فایل جدید هست!

لوگو شرکت اپل رو روی لوگو سایت زومیت گذاشتم و خروجی گرفتم که به این شکل خروجی داده!

120730

MMSHFE
پنج شنبه 12 تیر 1393, 10:00 صبح
اگه GIF باشه که کلاً کیفیتش پایین میاد و بهتره از PNG استفاده کنید. همونطور که دوستان گفتن، باید از ImageAlphaBlending و ImageSaveAlpha استفاده کنید. ضمناً برای تنظیم شفافیت هم از ImageCopyMerge استفاده کنید و با پارامتر آخر میزان ادغام (0 کاملاً شفاف تا 100 کاملاً کدر) رو مشخص کنید.

i-php-i
پنج شنبه 12 تیر 1393, 13:49 عصر
کدها رو به این شکل تغییر دادم مشکل کیفیت برطرف شد ولی هنوز مشکل شفافیت وجود داره، البته شفاف می شه اما اون بخش از تصویر که شفاف شده کیفیت نداره.

$stamp = imagecreatefrompng('wm.png');

//$im = imagecreatefromjpeg('main.jpg');
$im = imagecreatefrompng('main.png');
imagealphablending($im, false);
imagesavealpha($im, true);


$save_watermark_photo_address = 'newfile.png';

// Set the margins for the stamp and get the height/width of the stamp image

$marge_right = 0;
$marge_bottom = 0;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

// Copy the stamp image onto our photo using the margin offsets and the photo
// width to calculate positioning of the stamp.

//imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
imagecopymerge ($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp),100);

// Output and free memory
// header('Content-type: image/png');

//imagejpeg($im, $save_watermark_photo_address, 100);
imagepng($im, $save_watermark_photo_address,9);

i-php-i
جمعه 13 تیر 1393, 16:45 عصر
الان از این کد استفاده می کنم و واترمارک ایجاد می شه اما اون بخش از تصویر که شفاف می شه کیفیتی نداره

برای این مشکل راه حلی به ذخنتون نمی رسه؟



$stamp = imagecreatefrompng('wm.png');
imagealphablending($stamp, false);
imagesavealpha($stamp, true);

$im = imagecreatefrompng('main.png');
imagealphablending($im, false);
imagesavealpha($im, true);

$save_watermark_photo_address = 'newfile.png';

$marge_right = 0;
$marge_bottom = 0;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

imagecopymerge ($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp),10);

imagepng($im, $save_watermark_photo_address,9);