1. 程式人生 > >CANVAS實現圖片模糊(處理庫StackBlur.js)

CANVAS實現圖片模糊(處理庫StackBlur.js)

之前解決一些瀏覽器不支援CSS濾鏡模糊圖片,用的方法是SVG模糊濾鏡,但用SVG模糊濾鏡,圖片大小不好控制,每次都是邊測試邊調整寬高

正好現在做的一個頁面的要求是,一張圖片,根據訪問者來顯示其狀態,沒有與此條動態互動的使用者看到的圖片是模糊的,點贊或評論後才可以見到不模糊的圖片,所以就用到CANVAS繪製圖片疊在圖片上,控制其顯示與隱藏即可

這個庫提供了3個函式:

stackBlurImage( sourceImageID, targetCanvasID, radius, blurAlphaChannel );    //用於將圖片模糊繪製到canvas

stackBlurCanvasRGBA( targetCanvasID, top_x, top_y, width, height, radius );  //用於對Canvas矩形區域執行RGBA模糊

stackBlurCanvasRGB( targetCanvasID, top_x, top_y, width, height, radius );     //用於對Canvas矩形區域執行RGB模糊,不考慮Alpha值

stackBlurImage( sourceImageID, targetCanvasID, radius, blurAlphaChannel )
sourceImageID表示要模糊的圖片的id;
targetCanvasID表示要顯示模糊圖片的canvas元素的id;
radius表示模糊的半徑大小。不過,根據我的對比測試,radius好像與CSS中filter濾鏡的模糊值不是1:1匹配的,反倒是有些類似2:1. 也就是這裡的20px的半徑模糊近似於CSS中blur濾鏡值設定為10px;

blurAlphaChannel為布林屬性,表示aplha透明通道是否要模糊,true表示要模糊。

改了下處理庫
var img = document.getElementById( imageID );
var w = img.naturalWidth;
var h = img.naturalHeight;
var canvas = document.getElementById( canvasID );
以下是改的部分
//canvas.style.width  = w + "px";
//canvas.style.height = h + "px";
//顯示圖片縮放情況下,使CANVAS與圖片顯示的一樣大

canvas.style.width  = img.width + 'px';
canvas.style.height = img.height + 'px';

解決getImageData跨域問題:
此庫中用到的getImageData函式
這個函式包含著js跨域的問題。js跨域限制是不能獲取非同一域名下的資料的,(本地的位置是沒有域名的,url是非同一域名的),所以瀏覽器都認為你是跨域了,會報錯。

解決辦法:

本地位置的訪問地址用:localhost

url是非同一域名的,藉助後端技術:
<?php
$pic = 'http://avatar.csdn.net/D/5/3/1_qq_16494241.jpg';
$arr = getimagesize($pic);
$pic = "data:{$arr['mime']};base64," . base64_encode(file_get_contents($pic));
?>
<img src="<?php echo $pic ?>" /> 

在HTML 5中,新增加了兩個用來判斷圖片的寬度和高度的屬性,分別為naturalWidth 和naturalHeight屬性,例子如下:

var rw = myimage.naturalWidth;// 真實圖片寬度 
var rh = myimage.naturalHeight;//真是圖片高度 

但有個前提是,必須在圖片完全下載到客戶端瀏覽器才能判斷,目前在ie 9,Firefox, Chrome, Safari 和Opera都是可以使用的,如果是不支援的版本瀏覽器,那可以用傳統方法判斷,如下:

var myimage = document.getElementById("myimage"); 
if (typeof myimage.naturalWidth == "undefined") { 
// IE 6/7/8 
var i = new Image(); 
i.src = myimage.src; 
var rw = i.width; 
var rh = i.height; 

} else { 
// HTML5 browsers 
var rw = myimage.naturalWidth; 
var rh = myimage.naturalHeight; 

相關推薦

CANVAS實現圖片模糊處理StackBlur.js

之前解決一些瀏覽器不支援CSS濾鏡模糊圖片,用的方法是SVG模糊濾鏡,但用SVG模糊濾鏡,圖片大小不好控制,每次都是邊測試邊調整寬高 正好現在做的一個頁面的要求是,一張圖片,根據訪問者來顯示其狀態,沒有與此條動態互動的使用者看到的圖片是模糊的,點贊或評論後才可以見到不模糊的

JQuery實現圖片切換自動切換+手動切換

學習JS的時候本來積攢了很多有趣的小例子,但是苦於沒有找到一些好的平臺來展示這些JS效果。今天發現了RunJS這個分享程式碼的平臺,迫不及待得想跟大家分享。     在瀏覽各大商城網站的時候,或者某些網站的首頁,都會展示與本網站相關的一些實時切換的圖片, 本文就給大家分

HTML5 file API加canvas實現圖片前端JS壓縮並上傳 轉載

www. 手機 回調 pre lan 瀏覽器中 rdp 效果 二進制 一、圖片上傳前端壓縮的現實意義 對於大尺寸圖片的上傳,在前端進行壓縮除了省流量外,最大的意義是極大的提高了用戶體驗。 這種體驗包括兩方面: 由於上傳圖片尺寸比較小,因此上傳速度會比較快,交互會更

趙雅智_運用Bitmap和Canvas實現圖片顯示,縮小,旋轉,水印

bitmap raw 圖形 res efault ast bmp 運用 放置 上一篇已經介紹了Android種Bitmap和Canvas的使用,以下我們來寫一個詳細實例 http://blog.csdn.net/zhaoyazhi2129/article/details

學習 | canvas實現圖片懶加載 && 下滑底部加載

window back mov code 圖片 wim .com rod pro   用canvas實現圖片的懶加載並且下滑到據底部60px的時候再次加載數據,模仿UC瀏覽器的新聞加載。   完整代碼:https://github.com/dirkhe1051931999

canvas實現圖片旋轉縮放

canvas實現圖片旋轉,用到的基本函式: rotate()實現旋轉; scale(X,Y)實現縮放,X代表水平縮放,Y代表垂直縮放; translate(X,Y)為畫布的變換矩陣新增水平的和垂直的偏移; 基本思路:用rotate()方法實現圖片旋轉,用scale()實現縮放。

canvas實現圖片圍繞左上角一點進行旋轉

canvas插入圖片,需要先在onload事件中預載入圖片,然後在用drawImage()方法插入圖片。 <!DOCTYPE html> <html> <head> <meta charset="utf-8">

深度學習 Keras利用CNN實現圖片識別Mnist、Cifar10

視覺集        視覺資料庫是用來提供給圖片識別領域用素材,目前各個教材常用的主要有手寫數字識別庫、10中小圖片分類庫,詳細介紹如下: Mnist       &

機器學習資料預處理sklearn系列函式

【1】 sklearn.preprocessing.PolynomialFeatures PolynomialFeatures有三個引數 degree:控制多項式的度 interaction_

使用HOG+卡方距離的方法實現圖片檢索python寫

在上一篇的文章中,使用HOG特徵提取了圖片的特徵,本篇文章則加上卡方距離的方法實現相似圖片的檢索。 前言 使用150張圖片,包括airplane、beach、desert、island和sea_ice各50張圖片進行測試。 第一步,獲取圖片特徵 獲取

html5 用canvas實現圖片自動滑動切換

轉自:http://blog.csdn.net/iamke1987/article/details/9886707 圖片自動滑動效果很多網站都要用,最近在學html5就拿這個練練手,發現用canvas實現起來其實很簡單。程式碼比較粗糙,有很多改進的地方,不過還是先記錄一

Jcrop外掛+Canvas實現圖片上傳預覽+圖片裁剪上傳

前言 想實現一個功能:使用者點選上傳按鈕,選擇圖片後。圖片顯示在一個彈出框上,並可以對圖片進行裁剪。裁剪後的圖片顯示在頁面上。提交表單即可上傳圖片。 遇到問題 瀏覽器的安全設定不讓使用者獲取上傳的圖片路徑,實際獲取的是c:\fakepath\a.jp

基於canvas實現圖片壓縮

用法: compressImg(target.files[0], 2).then(base64 => { console.log(base64) // 在這裡實現壓縮後的上傳操作 // ... }).catch(err => { // 壓縮異常 Indicator.c

Android實現高斯模糊也叫毛玻璃效果

/*** 高斯模糊* @param bkg* @param view*/private void blur(Bitmap bkg, View view) {float radius = 25;Bitmap overlay = Bitmap.createBitmap((int) (view.getMeasure

IOS 使用CoreImage實現圖片模糊效果

//原始圖片 UIImage*image = [UIImage imageNamed:@"sourceImage.jpg"]; /*.....coreImage部分....*/ //CIImage(圖片輸入源類似於UIImage) C

jscanvas實現圖片的預覽壓縮和上傳

先來一張效果圖,壓壓驚第一步:使用者選擇需要上傳的圖片<input type="file" accept="image/*" type="file"" name="imageFile" onchange="upload()">在選定了圖片後 upload 函式將被

iOS簡單實現圖片模糊漸變效果

文章說明:本文可以其實只是個人對知識的記錄,為了自己以後找起來方便 例子參考連結 http://code4app.com/ios/EssentialImager/527cb3596803fa4e50000000 實現原理:其實就是用一張黑白的漸變圖片作為底圖 效果圖片: 具

HTML5 canvas實現圖片拉伸、壓縮與裁剪

前言: 我們在網頁中經常會用到圖片展示,通常情況下會給一個固定的寬高來顯示這個圖片,然而從伺服器端上傳的圖片大小是不確定的,如果直接按預設填充這個框有時候就會特別醜orz。作為一個完(wai)美(mao)主(xie)義(hui)者,讓圖片們儘可能優美

HTML5+canvas實現圖片的壓縮上傳

1.圖片上傳輸入框<input type="file" name="" class="fileUpload" accept="image/*" capture="camera"/>2.上面時候觸發onchange$('.fileUpload').on('chang

利用PS實現圖片的映象處理

所謂映象,通俗地講,就是你在照鏡子的時候,鏡子中所成的像。眾所周知,我們在照鏡子時,我們實際的左手對應在鏡子中在右邊,而右手在左邊。在某些特殊的情況下,我們想要對圖片進行映象處理,該怎麼實現呢?接下來我們舉例說明:這裡有一張劍八的圖片,我們如何實現劍八照鏡子的效果呢?首先開啟