모자이크 이미지를 표시할 때 페이드인 애니메이션은 매우 흐릿한 모자이크에서 매우 선명한 모자이크로 점차 바뀌는 과정입니다. 페이드아웃 애니메이션의 처리는 이미지가 선명해졌다가 점차 흐려지는 과정입니다. 구체적인 내용을 살펴보세요.
먼저 모자이크 이미지의 페이드인 효과를 살펴보겠습니다
코드는 다음과 같습니다
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <meta charset="utf-8" /> <script type="text/javascript"> var imageData; var fadeMosaicSize = 0; var THandle; var mem_canvas; var mem_context; var context; var img; function loadImage() { img = new Image(); mem_canvas = document.createElement('canvas'); img.onload = function onImageLoad() { mem_canvas.width = img.width; mem_canvas.height = img.height; mem_context = mem_canvas.getContext('2d'); mem_context.drawImage(img, 0, 0); imageData = mem_context.getImageData(0, 0, mem_canvas.width, mem_canvas.height); startFadeIn(); } img.src = 'img/luffy.jpg'; var canvas = document.getElementById('SimpleCanvas'); if (!canvas || !canvas.getContext) { return false; }else{ context = canvas.getContext('2d'); } } function startFadeIn() { fadeMosaicSize = 64; THandle = setInterval(onFadeIn, 50); } function onFadeIn() { if (fadeMosaicSize <= 1) { clearInterval(THandle); context.drawImage(img, 32, 32); } else { CreateMosaic(mem_context, mem_canvas.width, mem_canvas.height, fadeMosaicSize); context.drawImage(mem_canvas, 32, 32); fadeMosaicSize = Math.floor(fadeMosaicSize / 1.5); } } function CreateMosaic(context, width,height,mosaicSize) { var x=0; var y=0; for (y = 0; y < height; y = y + mosaicSize) { for (x = 0; x < width; x = x + mosaicSize) { var cR = imageData.data[(y * width + x) * 4]; var cG = imageData.data[(y * width + x) * 4 + 1]; var cB = imageData.data[(y * width + x) * 4 + 2]; context.fillStyle = "rgb("+cR+","+cG+","+cB+")"; context.fillRect(x, y, x + mosaicSize, y + mosaicSize); } } } </script> </head> <body onload="loadImage();" style="background-color:#D0D0D0;"> <canvas id="SimpleCanvas" width="640" height="360" style="background-color:#FFFFFF;"></canvas> <div>Canvas Demo</div> <div id="output"></div> </body> </html>
설명:
body 태그의 onload 이벤트로 인해 loadImagen() 함수는 페이지가 표시될 때 호출됩니다.
페이지가 표시된 후 내부적으로 그려진 Canves 개체를 만들고 이미지를 읽습니다. 그려진 픽셀 데이터를 가져옵니다. 그 후 타이머 처리를 시작하고 타이머 이벤트에 모자이크 이미지를 생성하여 화면에 그립니다. 타이머 처리를 실행하면 모자이크 크기(fadeMosaicSize)가 페이드인 효과를 표현하기 위해 매우 두꺼운 모자이크에서 시작하여 매우 선명한 모자이크 애니메이션으로 줄어들게 됩니다.
그라디언트 속도를 조정하려면 타이머 간격을 변경할 수 있습니다.
fadeMosaicSize = Math.floor(fadeMosaicSize / 1.5);
결과 실행:
위의 HTML 파일을 표시합니다. 깊은 모자이크 이미지를 표시합니다.
이것은 역동적인 과정으로, 이미지가 서서히 선명해지고 마침내 다음과 같은 효과가 나타납니다.
페이드인 효과를 본 후 페이드인 구현을 살펴보겠습니다. 그리고 모자이크 이미지의 페이드 아웃 효과
코드는 다음과 같습니다
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <meta charset="utf-8" /> <script type="text/javascript"> var imageData; var fadeMosaicSize = 0; var THandle; var mem_canvas; var mem_context; var context; var img; function loadImage() { img = new Image(); mem_canvas = document.createElement('canvas'); img.onload = function onImageLoad() { mem_canvas.width = img.width; mem_canvas.height = img.height; mem_context = mem_canvas.getContext('2d'); mem_context.drawImage(img, 0, 0); imageData = mem_context.getImageData(0, 0, mem_canvas.width, mem_canvas.height); startFadeIn(); } img.src = 'img/luffy.jpg'; var canvas = document.getElementById('SimpleCanvas'); if (!canvas || !canvas.getContext) { return false; }else{ context = canvas.getContext('2d'); } } function startFadeIn() { fadeMosaicSize = 64; THandle = setInterval(onFadeIn, 50); } function startFadeOut() { fadeMosaicSize = 1; THandle = setInterval(onFadeOut, 50); } function onFadeIn() { if (fadeMosaicSize <= 1) { clearInterval(THandle); context.drawImage(img, 32, 32); THandle = setInterval(onShow, 2000); } else { CreateMosaic(mem_context, mem_canvas.width, mem_canvas.height, fadeMosaicSize); context.drawImage(mem_canvas, 32, 32); fadeMosaicSize = Math.floor(fadeMosaicSize / 1.5); } } function onShow() { clearInterval(THandle); startFadeOut(); } function onFadeOut() { if (64 < fadeMosaicSize) { clearInterval(THandle); context.fillStyle = "#FFFFFF"; context.fillRect(32, 32, mem_canvas.width, mem_canvas.height); } else { CreateMosaic(mem_context, mem_canvas.width, mem_canvas.height, fadeMosaicSize); context.drawImage(mem_canvas, 32, 32); fadeMosaicSize = Math.ceil(fadeMosaicSize * 1.5); } } function CreateMosaic(context, width,height,mosaicSize) { var x=0; var y=0; for (y = 0; y < height; y = y + mosaicSize) { for (x = 0; x < width; x = x + mosaicSize) { var cR = imageData.data[(y * width + x) * 4]; var cG = imageData.data[(y * width + x) * 4 + 1]; var cB = imageData.data[(y * width + x) * 4 + 2]; context.fillStyle = "rgb("+cR+","+cG+","+cB+")"; context.fillRect(x, y, x + mosaicSize, y + mosaicSize); } } } </script> </head> <body onload="loadImage();" style="background-color:#D0D0D0;"> <canvas id="SimpleCanvas" width="640" height="360" style="background-color:#FFFFFF;"></canvas> <div>Canvas Demo</div> <div id="output"></div> </body> </html>
설명:
이전 코드를 처리한 후 2초 간격으로 실행한 뒤, 그 간격에서 onFadeOut을 실행하는데, 페이드 아웃되기 전에 실행되는 코드입니다.
실행 결과
위 HTML 파일을 실행하면 다음과 같은 모자이크 효과가 나타납니다
그러면 다음과 같이 점차 선명해집니다
그 후 약 2분 동안 이미지가 표시됩니다. 몇 초 후, 이미지에 아래 그림과 같이 모자이크 효과가 나타나기 시작합니다
그러면 모자이크가 점차 두꺼워지고 마침내 아래 그림과 같이 숨겨지며 페이지에는 아무것도 없습니다
위 내용은 HTML5 캔버스는 모자이크(코드)의 페이드인 및 페이드아웃 효과를 어떻게 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!