PDA

View Full Version : سوال: مشکل در استفاده از watermark



soroush.r70
شنبه 29 مهر 1391, 18:46 عصر
من از کد زیر برای watermark استفاده می کنم ولی یه مشکلی وجود داره وقتی تصویری با فرمت png رو به عنوان واتر مارک به یک تصویر با فرمت jpg اضافه می کنم این کد متن تصویر png رو نشون نمی ده و یه خط زرد نشون می ده و بک گراند که چیزی نیست سفید می زنه چطوری می شه مشکلو حل کرد...؟

و مشکل دیگه ای که وجود داره اینکه وقتی این تکه کد داخل حلقه while می ذارم هر بار واتر مارک اضافه می شه و شفافیت واتر مارک رو زیاد می کنه در واقع واتر مارک فقط یک بار باید در تصویر قرار بگیره که اینم یه مشکله که با هر بار رفرش صفحه واتر مارک می ره روی همون واتر مارک قبلی

کد :


$im = imagecreatefromjpeg('upload/'.$row['pic'].'');
$st = imagecreatefrompng('images/wm.png');
// Set the margins for the stamp
$marge_left = 300;
$marge_top = 450;
// Calculate width and height of stamp
$sx = imagesx($st);
$sy = imagesy($st);
// Merge the stamp onto our photo with an opacity (transparency) of 50%
imagecopymerge($im, $st, $marge_left, $marge_top, 0, 0, $sx, $sy, 50);
// Save the image to file and free memory
imagejpeg($im, 'upload/'.$row['pic'].'', 100);
imagedestroy($im);


نمونه ای از مشکل :

http://upcity.ir/images/53423148362138236983.jpg

soroush.r70
دوشنبه 01 آبان 1391, 09:34 صبح
کسی نمی دونه مشکل از کجاست..؟

soroush.r70
پنج شنبه 04 آبان 1391, 11:36 صبح
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

MMSHFE
پنج شنبه 04 آبان 1391, 23:55 عصر
<?php
$im = imagecreatefromjpeg('upload/'.$row['pic']);
$st = imagecreatefrompng('images/wm.png');
// Enable alpha blending
imagealphablending($im, true);
imagealphablending($st, true);
// Set the margins for the stamp
$margin_left = 300;
$margin_top = 450;
// Calculate width and height of stamp
$sx = imagesx($st);
$sy = imagesy($st);
// Merge the stamp onto our photo
imagecopyresampled($im, $st, $margin_left, $margin_top, 0, 0, $sx, $sy, $sx, $sy);
// Save the image to file and free memory
header('Content-Type: image/jpeg');
imagejpeg($im, 'upload/'.$row['pic'], 100);
imagedestroy($st);
imagedestroy($im);
?>

مشکل تکرار شدن واترمارک در تصویر هم بخاطر اینه که شما هربار که واترمارک رو اضافه میکنید، دوباره نتیجه رو توی خود فایل تصویر اصلی ذخیره میکنید و درنتیجه در تکرار بعدی حلقه، واترمارک از قبل روی تصویر هست و واترمارک جدید روی قبلی ذخیره میشه.
نکته: در روش فوق، برای اینکه تصویر دوم با شفافیت 50٪ ذخیره بشه، توی فوتوشاپ تصویر wm.png رو باز کنید و شفافیت لایه اون رو روی 50٪ تنظیم کنید و ذخیره کنید.
موفق باشید.

soroush.r70
جمعه 05 آبان 1391, 10:01 صبح
با تشک از شما درسته من این کد داخل while می ذارم تکرار می شه ولی پس چطوری برای همه تصاویرم که داخل حلقه while هستن watermark ایجاد کنم.

و سوال دیگه اینکه چطوری می شه منطقه جاگذاری watermark رو تنظیم کرد مثلا watermark بیاد پایین سمت راست قرار بگیره.

MMSHFE
جمعه 05 آبان 1391, 10:56 صبح
درمورد سؤال اولتون باید حلقه while رو به درستی تنظیم کنید تا هربار، یکی از تصاویر انتخاب بشه نه اینکه در تمام دفعات تکرار حلقه، یک تصویر ثابت انتخاب و ویرایش بشه. یعنی اون خط اول که im$ رو مقداردهی میکنید رو اصلاح کنید.
درمورد سؤال دوم هم باید متغیرهای margin_left$ و margin_top$ رو تنظیم کنید. حالا اگه اندازه تصاویرتون متفاوت هست و ثابت نیست، به راحتی میتونید با استفاده از ابعاد تصویر، محل Watermark رو تنظیم کنید. مثال:


<?php
$im = imagecreatefromjpeg('upload/'.$row['pic']);
$st = imagecreatefrompng('images/wm.png');
// Enable alpha blending
imagealphablending($im, true);
imagealphablending($st, true);
// Calculate width and height of stamp
$sx = imagesx($st);
$sy = imagesy($st);
// Set the margins for the stamp
$margin_left = imagesx($im) - $sx;
$margin_top = imagesy($im) - $sy;
// Merge the stamp onto our photo
imagecopyresampled($im, $st, $margin_left, $margin_top, 0, 0, $sx, $sy, $sx, $sy);
// Save the image to file and free memory
header('Content-Type: image/jpeg');
imagejpeg($im, 'upload/'.$row['pic'], 100);
imagedestroy($st);
imagedestroy($im);
?>

موفق باشید.

soroush.r70
دوشنبه 08 آبان 1391, 19:40 عصر
درمورد سؤال اولتون باید حلقه while رو به درستی تنظیم کنید تا هربار، یکی از تصاویر انتخاب بشه نه اینکه در تمام دفعات تکرار حلقه، یک تصویر ثابت انتخاب و ویرایش بشه. یعنی اون خط اول که im$ رو مقداردهی میکنید رو اصلاح کنید.


این کارو می کنم ولی نمی دونم چرا بازم نمی شه

به این صورت باید چی کار کنم درست بشه.


while($row=$class->fetchassoc())
{
echo'

<div class="post-container">
<h2 class="title"><a href="';echo root; echo'index.php?id='.$row['id'].'">'.$row['title'].'</a></h2>';

$im = imagecreatefromjpeg('upload/'.$row['pic']);
$st = imagecreatefrompng('images/wm.png');
// Enable alpha blending
imagealphablending($im, true);
imagealphablending($st, true);
// Calculate width and height of stamp
$sx = imagesx($st);
$sy = imagesy($st);
// Set the margins for the stamp
$margin_left = imagesx($im) - $sx;
$margin_top = imagesy($im) - $sy;
// Merge the stamp onto our photo
imagecopyresampled($im, $st, $margin_left, $margin_top, 0, 0, $sx, $sy, $sx, $sy);
// Save the image to file and free memory
header('Content-Type: image/jpeg');
imagejpeg($im, 'upload/'.$row['pic'], 100);
imagedestroy($st);
imagedestroy($im);

echo'<a href="';echo root; echo'index.php?id='.$row['id'].'"> <center><img src="';echo root; echo'imgsize.php?w=557&h=457&img=upload/'.$row['pic'].'" alt="'.$row['title'].'" title="'.$row['title'].'" /></center> </a>
<div class="post-data">
<p>'.mb_substr(strip_tags($row["text"]),0,255,'UTF-8').'...</p>
<div class="btn-wrapper"> <a class="read-more-btn" href="';echo root; echo'index.php?id='.$row['id'].'">ادامه / دانلود</a>
<p></p>
</div>
</div>
</div>
</div>
';
}

MMSHFE
سه شنبه 09 آبان 1391, 22:21 عصر
اینو امتحان کنید:


while($row = $class->fetchassoc()) {
echo '<div class="post-container">' . PHP_EOL;
echo '<h2 class="title"><a href="' . root . 'index.php?id=' . $row['id'] . '">' . $row['title'] . '</a></h2>' . PHP_EOL;
$im = imagecreatefromjpeg('upload/'.$row['pic']);
$st = imagecreatefrompng('images/wm.png');
// Enable alpha blending
imagealphablending($im, true);
imagealphablending($st, true);
// Calculate width and height of stamp
$sx = imagesx($st);
$sy = imagesy($st);
// Set the margins for the stamp
$margin_left = imagesx($im) - $sx;
$margin_top = imagesy($im) - $sy;
// Merge the stamp onto our photo
imagecopyresampled($im, $st, $margin_left, $margin_top, 0, 0, $sx, $sy, $sx, $sy);
// Save the image to file and free memory
header('Content-Type: image/jpeg');
imagejpeg($im, 'upload/'.$row['pic'], 100);
imagedestroy($st);
imagedestroy($im);
echo '<a href="' . root . 'index.php?id=' . $row['id'] . '"><center><img src="' . root . 'imgsize.php?w=557&h=457&img=upload/' . $row['pic'] . '" alt="' . $row['title'] . '" title="' . $row['title'] . '"/></center></a>' . PHP_EOL;
echo '<div class="post-data">' . PHP_EOL;
echo '<p>' . mb_substr(strip_tags($row['text']), 0, 255, 'UTF-8') . '...</p>' . PHP_EOL;
echo '<div class="btn-wrapper"><a class="read-more-btn" href="' . root . 'index.php?id=' . $row['id'] . '">ادامه / دانلود</a>' . PHP_EOL;
echo '<p></p>' . PHP_EOL;
echo '</div>' . PHP_EOL;
echo '</div>' . PHP_EOL;
echo '</div>' . PHP_EOL;
echo '</div>' . PHP_EOL;
}