View Full Version : graysclae کردن تصویر عنگام hover
farhadfery
پنج شنبه 07 مهر 1390, 23:24 عصر
سلام. اینجا را ببینید (http://webdesignerwall.com/demo/html5-grayscale/) من دقیقا همین صفحه را به صورت لوکال روی سیستمم ایجاد می کنم و jquery هم به درستی به صفحه من لینک. اما نمی دونم چرا جواب نمی ده:ناراحت:. تصاویر را همانطور که هست نمایش می دهد. حالت gray اصلا ندارند.
ricky22
جمعه 08 مهر 1390, 00:17 صبح
Source
این صحفه روو چک کنید
http://www.sohtanaka.com/web-design/examples/hover-over-trick/
nilmil_nil
جمعه 08 مهر 1390, 10:27 صبح
سلام دوست عزیز
شما باید از هر عکس دو تا داشته باشی
یکی سیاه سفید و یکی رنگی و با استفاده از توابع جی کوئری وقتی موس روی عکس سیاه سفید میری عکس رنگی fadeIn بشه
امید وارم درست متوجه شده باشم
farhadfery
جمعه 08 مهر 1390, 11:12 صبح
Source
این صحفه روو چک کنید
http://www.sohtanaka.com/web-design/examples/hover-over-trick/
ممنون. در همین لینک که دوستمون معرفی کردند. باید برای هر عکس رنگی یک عکس gray هم بسازم. درسته؟ بعد نام عکس gray را چی بگذارم؟
nilmil_nil
جمعه 08 مهر 1390, 11:21 صبح
هر چیزی که دلت خواست
شما باید هر دو عکس رو روی هم بذارید و عکس سیاه سفید رو روی عکس رنگی بذارید و هر دفعه که موس روی عکس سیاه سفید میره عکس سیاه سفید محو بشه
در نتیجه عکس رنگی نشون داده میشه
این اگوریتم کار بود اگه خواستی یه نمونه برات آپ می کنم
farhadfery
جمعه 08 مهر 1390, 12:11 عصر
ممنون/ متوجه شدم. یه کارهایی هم کردم. جواب داد/ البته اگر آپلود هم کنید خوبه! آپلود کنید از شما را هم ببینم.
eAmin
جمعه 08 مهر 1390, 12:53 عصر
دوست عزیز نیاز نیست از هر عکس دوتا داشته باشید! چون اسکریپتی که در پست اول معرفی و استفاده شده با استفاده از html5 میتونه عکسهای رنگی رو به سیاه و سفید تبدیل کنه.
شما کدهایی رو که در لوکال استفاده میکنید رو اینجا قرار بدید تا ببینیم مشکل کار کجا هست.
farhadfery
جمعه 08 مهر 1390, 13:52 عصر
دوست عزیز نیاز نیست از هر عکس دوتا داشته باشید! چون اسکریپتی که در پست اول معرفی و استفاده شده با استفاده از html5 میتونه عکسهای رنگی رو به سیاه و سفید تبدیل کنه.
شما کدهایی رو که در لوکال استفاده میکنید رو اینجا قرار بدید تا ببینیم مشکل کار کجا هست.
کد با پست لینک پست اول یکی هست. اما نمی دونم چرا جواب نمی ده! من عکس ها را تو پوشه images قرار دادم و برای jquery هم لینک از گوگل دادم. هنگام اجرای صفحه تصاویر به صورت مهمولی نمایش داده می شند! حالت gray ندارند. این کد من:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>mrfarhad05@yahoo.com</title>
<style type="text/css">
body {
background: #fff;
color: #000;
font: 14px/140% Arial, Helvetica, sans-serif;
margin: 40px 0;
}
a {
text-decoration: none;
color: #86AEBB;
}
img {
border: none;
}
h2 {
font: bold 14px/110% Arial, Helvetica, sans-serif;
margin: 0 0 30px;
padding: 0 0 20px;
color: #999;
border-bottom: solid 1px #ccc;
clear: both;
}
h3 {
font: bold 16px/120% Arial, Helvetica, sans-serif;
margin: 0;
}
#pagewrap {
width: 948px;
margin: 0 auto;
}
.item {
width: 296px;
margin: 0 0 30px 30px;
float: left;
}
.item.first {
clear: left;
margin-left: 0;
}
.item img {
opacity:0;
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript">
// $(".item img").css({"display":"none");
// On window load. This waits until images have loaded which is essential
$(window).load(function(){
// Fade in images so there isn't a color "pop" document load and then on window load
$(".item img").animate({opacity:1},500);
// clone image
$('.item img').each(function(){
var el = $(this);
el.css({"position":"absolute"}).wrap("<div class='img_wrapper' style='display: inline-block'>").clone().addClass('img_grayscale').css({"position":"absolute","z-index":"998","opacity":"0"}).insertBefore(el).queue(function(){
var el = $(this);
el.parent().css({"width":this.width,"height":this.height});
el.dequeue();
});
this.src = grayscale(this.src);
});
// Fade image
$('.item img').mouseover(function(){
$(this).parent().find('img:first').stop().animate( {opacity:1}, 1000);
})
$('.img_grayscale').mouseout(function(){
$(this).stop().animate({opacity:0}, 1000);
});
});
// Grayscale w canvas method
function grayscale(src){
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var imgObj = new Image();
imgObj.src = src;
canvas.width = imgObj.width;
canvas.height = imgObj.height;
ctx.drawImage(imgObj, 0, 0);
var imgPixels = ctx.getImageData(0, 0, canvas.width, canvas.height);
for(var y = 0; y < imgPixels.height; y++){
for(var x = 0; x < imgPixels.width; x++){
var i = (y * 4) * imgPixels.width + x * 4;
var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3;
imgPixels.data[i] = avg;
imgPixels.data[i + 1] = avg;
imgPixels.data[i + 2] = avg;
}
}
ctx.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);
return canvas.toDataURL();
}
</script>
</head>
<body>
<div id="pagewrap">
<h1>HTML5 & jQuery Grayscale Demo</h1>
<h2>Tutorial by <a href="http://www.webdesignerwall.com">Web Designer Wall</a> (<a href="http://www.webdesignerwall.com/tutorials/html5-grayscale-image-hover/">read article</a>). Coding by <a href="http://darcyclarke.me">Darcy Clarke</a>.</h2>
<div class="item first">
<a href="http://themify.me"><img src="images/themify.jpg"></a>
<h3>Themify</h3>
</div>
<div class="item">
<a href="http://icondock.com"><img src="images/icondock.jpg"></a>
<h3>IconDock</h3>
</div>
<div class="item">
<a href="http://www.webdesignerwall.com"><img src="images/webdesignerwall.jpg"></a>
<h3>Web Designer Wall</h3>
</div>
<div class="item first">
<a href="#"><img src="images/koifish.jpg"></a>
<h3>Koi</h3>
</div>
<div class="item">
<a href="#"><img src="images/phoenix.jpg"></a>
<h3>Phoenix</h3>
</div>
<div class="item">
<a href="#"><img src="images/peacock.jpg"></a>
<h3>Peacock</h3>
</div>
<div class="item first">
<a href="#"><img src="images/flow.jpg"></a>
<h3>Flow</h3>
</div>
<div class="item">
<a href="#"><img src="images/webdesign136cover.jpg"></a>
<h3>Web Designer</h3>
</div>
<div class="item">
<a href="#"><img src="images/sakura.jpg"></a>
<h3>Sakura</h3>
</div>
</div>
</body>
</html>
farhadfery
دوشنبه 11 مهر 1390, 11:10 صبح
دوست عزیز نیاز نیست از هر عکس دوتا داشته باشید! چون اسکریپتی که در پست اول معرفی و استفاده شده با استفاده از html5 میتونه عکسهای رنگی رو به سیاه و سفید تبدیل کنه.
شما کدهایی رو که در لوکال استفاده میکنید رو اینجا قرار بدید تا ببینیم مشکل کار کجا هست.
کد را اینجا گذاشتم، لطفاً بررسی کنید.
Mahnet
دوشنبه 11 مهر 1390, 13:52 عصر
با سلام
دقت کنید از جدیدترین نسخه jquery استفاده بشه...
در بخش اول :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>greyscale</title>
<link rel="stylesheet" href="GreyscaleHover/GreyscaleHover.css" media="screen" type="text/css">
<script type="text/javascript" src="jquery-1.6.1.min.js"></script>
<script type="text/javascript" src="GreyscaleHover/GreyscaleHover.js"></script>
</head>
<body>
<div class="item">
<img src="GreyscaleHover/images/finder.png"/>
</div>
<div class="item">
<img src="GreyscaleHover/images/media.png"/>
</div>
<div class="item">
<img src="GreyscaleHover/images/GarageBand.png"/>
</div>
</body>
</html>
در بخش دوم:
// On window load. This waits until images have loaded which is essential
$(window).load(function(){
// Fade in images so there isn't a color "pop" document load and then on window load
$(".item img").animate({opacity:1},500);
// clone image
$('.item img').each(function(){
var el = $(this);
el.css({"position":"absolute"}).wrap("<div class='img_wrapper' style='display: inline-block'>").clone().addClass('img_grayscale').css({"position":"absolute","z-index":"998","opacity":"0"}).insertBefore(el).queue(function(){
var el = $(this);
el.parent().css({"width":this.width,"height":this.height});
el.dequeue();
});
this.src = grayscale(this.src);
});
// Fade image
$('.item img').mouseover(function(){
$(this).parent().find('img:first').stop().animate( {opacity:1}, 1000);
})
$('.img_grayscale').mouseout(function(){
$(this).stop().animate({opacity:0}, 1000);
});
});
// Grayscale w canvas method
function grayscale(src){
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var imgObj = new Image();
imgObj.src = src;
canvas.width = imgObj.width;
canvas.height = imgObj.height;
ctx.drawImage(imgObj, 0, 0);
var imgPixels = ctx.getImageData(0, 0, canvas.width, canvas.height);
for(var y = 0; y < imgPixels.height; y++){
for(var x = 0; x < imgPixels.width; x++){
var i = (y * 4) * imgPixels.width + x * 4;
var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3;
imgPixels.data[i] = avg;
imgPixels.data[i + 1] = avg;
imgPixels.data[i + 2] = avg;
}
}
ctx.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);
return canvas.toDataURL();
}
این هم demo ... اصل کار این طوریه ...
موفق باشین
farhadfery
دوشنبه 11 مهر 1390, 17:23 عصر
جناب ماه نت من فایل ضمیمه شما را اجرا کردم؛ باز هم نشد! شما خودتون تست کردید؟:ناراحت:
Mahnet
دوشنبه 11 مهر 1390, 20:03 عصر
یادم رفته بود بگم ... getImageData تابع اسکریپتی برای کار با canvas هستش که به خوبی توسط مرورگر ها پشتیبانی نمیشه مشکل از الگوریتم برنامه نیست و باید این ضعف توسط مرورگر ها اصلاح بشه در هر صورت چون مرورگر Opera مرورگر محبوب من هست:چشمک:، با اون برنامه تون رو تست کردم و چون Opera به طور کامل از HTML5 و CSS3 پشتیبانی میکنه برنامتون توی اون به بهترین وجه کار میکنه ... مرورگر opera رو از سایتش http://www.opera.com/ دانلود کنید ... رایگان، کامل و کم حجم ... اما این راه حل من نبود و اگه کمی وقت بزارین میتونین این مشکل رو حل کنین ...
موفق باشین ...
farhadfery
سه شنبه 12 مهر 1390, 22:32 عصر
آخه مساله اینکه وقتی سایت را مشاهده می کنم.(همون لینک پست اول) مساله ای نیست و درست جواب می ده. اما لوکال نه!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.