1. 程式人生 > >canvas應用——將方形圖片處理為圓形

canvas應用——將方形圖片處理為圓形

上段時間在專案中需要將方形圖片處理為圓形圖片,你可能會說直接用css設定border-radius: 50%就可以了,但是專案中還要將此圖片的圓形圖片作為一部分利用canvas將其繪製到一張背景圖上面,所以就有了為何要用canvas來處理了。

我們知道 <canvas> 是 HTML5 新增的元素,可用於通過使用JavaScript中的指令碼來繪製圖形。我將本例中的主要處理函式封裝為一個方法,可以直接使用。

關於版本更新導致的引數更改詳情可檢視 此處

例子

你可以直接點選此處檢視 例子 ,先一睹為快。

更新

以下內容更新於2018-06-05:原型圖片的改良版

引數

引數 預設值 描述
img null 圖片(img)物件
type 0,number型別 設定生成圖片的大小:0設定生成的圖片大小是以圖片設定的css大小為準,1設定生成的圖片大小是以圖片解析度為準

程式碼

/**
 * 把圖片處理成圓形,如果不是正方形就按最小邊一半為半徑處理
 * @param  {object} imgObj 圖片(img)物件
 * @param  {number} imgType 設定生成圖片的大小:0設定生成的圖片大小是以圖片設定的css大小為準,1設定生成的圖片大小是以圖片解析度為準,預設值為0
 * @return {string}     return base64 png圖片字串
 */
function circle_image_v2(img, imgType) { var type = imgType || 0; var radius, diameter, canvas, ctx, natural; if (type) { if (img.naturalWidth > img.naturalHeight) { radius = img.naturalHeight / 2; } else { radius = img.naturalWidth / 2; } } else
{ if (img.width > img.height) { radius = img.height / 2; } else { radius = img.width / 2; } if (img.naturalWidth > img.naturalHeight) { natural = img.naturalHeight; } else { natural = img.naturalWidth; } } diameter = radius * 2; canvas = document.createElement('canvas'); if (!canvas.getContext) { // 判斷瀏覽器是否支援canvas,如果不支援在此處做相應的提示 console.log('您的瀏覽器版本過低,暫不支援。'); return false; } canvas.width = diameter; canvas.height = diameter; contex = canvas.getContext("2d"); contex.clearRect(0, 0, diameter, diameter); contex.save(); contex.beginPath(); contex.arc(radius, radius, radius, 0, Math.PI * 2, false); contex.clip(); if (type) { contex.drawImage(img, 0, 0, diameter, diameter, 0, 0, diameter, diameter); } else { contex.drawImage(img, 0, 0, natural, natural, 0, 0, diameter, diameter); } contex.restore(); return canvas.toDataURL('image/png'); }

以下為舊版內容。

引數

引數 描述
img 圖片(img)物件
oldImgWidth 原始圖片(img)的實際寬度(非css設定的)
oldImgHeight 原始圖片(img)的實際高度(非css設定的)

程式碼

/**
 * 把圖片處理成圓形,如果不是正方形就按最小邊一半為半徑處理
 * @param  {[type]} img 圖片(img)物件
 * @param  {[number]} oldImgWidth 原始圖片(img)的實際寬度(非css設定的)
 * @param  {[number]} oldImgHeight 原始圖片(img)的實際高度(非css設定的)
 * @return {[type]}     return base64 png圖片字串
 */
function circle_image(img, oldImgWidth, oldImgHeight) {
    var width, height, canvas, contex, circle;
    if (img.width > img.height) {
        width = img.height;
        height = img.height;
    } else {
        width = img.width;
        height = img.width;
    }
    canvas = document.createElement('canvas');
    if (!canvas.getContext) { // 判斷瀏覽器是否支援canvas,如果不支援在此處做相應的提示
        console.log('您的瀏覽器版本過低,暫不支援。');
        return false;
    }
    canvas.width = width;
    canvas.height = height;
    contex = canvas.getContext("2d");
    circle = {
        x: width / 2,
        y: height / 2,
        r: width / 2
    };
    contex.clearRect(0, 0, width, height);
    contex.save();
    contex.beginPath();
    contex.arc(circle.x, circle.y, circle.r, 0, Math.PI * 2, false);
    contex.clip();
    contex.drawImage(img, 0, 0, oldImgWidth, oldImgHeight, 0, 0, width, height);
    contex.restore();
    return canvas.toDataURL('image/png');
}

相關推薦

canvas應用——方形圖片處理圓形

上段時間在專案中需要將方形圖片處理為圓形圖片,你可能會說直接用css設定border-radius: 50%就可以了,但是專案中還要將此圖片的圓形圖片作為一部分利用canvas將其繪製到一張背景圖上面,所以就有了為何要用canvas來處理了。 我們知道 <

IOS應用開發-圖片處理(拉伸圖片 建立縮圖 解決圖片旋轉的問題 圖片編碼及上傳 圖片寫入磁碟)

在做專案時我們經常要對圖片進行一些處理,以達到效能優化或滿足需求。常見的情形有以下幾種 //http://stackoverflow.com/questions/5427656/ios-uiimagepickercontroller-result-image-orien

Android 本地圖片轉換Base64加密字串及根據加密串反向生成圖片

一.需求場景     某些時候,我們要傳遞圖片到伺服器端,那麼是走IO還是直接將二進位制資料流通過Base64轉碼加密後變更為字串傳遞給伺服器呢?其實兩種方式均可實現功能,而對於容量比較小的圖片,如在2MB以內的圖片來說,採用Base64加密字串傳遞的方式

表格資料處理帶【】的資料

首先,將需要用到的表格資料在Excel中處理一下,將空著的格子中填入0,具體操作,參見 之後將需要融合的列資料的每一列單獨儲存在檔案中(直接選中列,複製貼上)。 Java部分的核心程式碼:     public static void main(String[] ar

如何使用 python3 RGB 圖片轉換 灰度圖

首先,介紹第一種方法, 使用  PIL  庫,   PIL庫是一種python語言常用的一個圖形處理庫。 關於   PIL  庫的安裝本文就不介紹了。   from PIL import Image I = Image

批量.jpg圖片轉換.yuv格式(使用ffmepg)

轉載請註明出處。 由於跑編碼的需要,所以需要製作一個.yuv格式的圖片資料集,但是手頭只有.jpg格式的,故記錄下轉換過程。 ①安裝ffmpeg ②安裝ffmpeg的python3介面ffmpy3 在命令列中輸入以下命令: pip install f

python全站圖片webp格式

webp是什麼呢? WebP,是由Google發展出來的一種同時提供了有失真壓縮與無失真壓縮的圖片檔案格式。 webp圖片格式可以極大地減少檔案大小,但同時達到和JPEG格式相同的圖片質量,因此可以顯著減少圖片檔案在網路上的傳送時間,節約網路流量 據Google較早的測試,WebP的無失

Android中將方形圖片擷取成圓形的兩種實現方式

以下兩種方法均有不足,僅供參考 第一種實現方式是通過設定畫筆的渲染方式對圖片進行處理: 首先要了解幾種渲染方式 1.BitmapShader(影象渲染)   BitmapShader的作用是

使用ffmpegBMP圖片編碼x264視訊檔案,H264視訊儲存BMP圖片,yuv視訊檔案儲存圖片的程式碼

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> #ifdef __cplusplus extern "C" { #endif #include

在Java應用程式中將PDF轉換圖片圖片轉換PDF

這篇文章將介紹如何在Java應用程式中將PDF檔案轉換為圖片以及將圖片轉換為PDF檔案。 使用元件: Free Spire.PDF for JAVA Free Spire.PDF for JAVA是一款完全免費的PDF Java元件,開發人員可以使用它在Java應用程式中進行建立PD

OpenCV影象處理--影象裁剪圓形

1,需求 為了便於專案前端展示使用者頭像,需要將頭像處理為圓形,非圓形區域設定為透明。其實,前端可以在顯示的時候處理,但是前端採用WebGL,暫時搞不定,所以由後端進行影象的一次性加工。 於是,我們嘗試用Linux工具Convert來完成,但是,百思無解,後

Python之Excel圖片處理excel chart另存圖片

Python之Excel chart另存為圖片 大家好,好久沒有更新部落格了,這一段時間有點忙,公司接觸到了大量的excel檔案處理,現將自己在工作中積累的經驗分享大家,供大家參考學習。 業務說明:這段時間我主要做的工作有: 解析excel,將目

android 圖片剪下在小米手機上方形框在華圓形框解決辦法

在android呼叫系統方法對圖片進行裁剪時,華為手機顯示的圖形會變成圓形,將aspectX和aspectY的值改為不是1;1就好了 if (android.os.Build.MODEL.contai

xml處理json對象數組

lac XML match return function str == new for function xmlStr2js(xmlStr) { var tagNames = xmlStr.match(/<\w+>/g) tagNames = deWeigh

js圖片轉換base64

draw etc img function 圖片路徑 轉換 tco document substr var img = "imgurl";//imgurl 就是你的圖片路徑 function getBase64Image(img) { var canva

eclipse 運行錯誤:在類XXX中找不到 main 方法, 請 main 方法定義: public static void main(String[] args) 否則 JavaFX 應用程序類必須擴展javafx.application.Application

分享圖片 java stat 報錯 es2017 pub .... img nbsp 新建了一個類Hello: 代碼: 第一次運行報錯: 點擊關閉該類的界面時出現: 點擊是,然後再次打開,可以正確執行,結果為: 這是為什麽.... ec

H5頁面轉化圖片

head true pos ref -o 如果 data pad tor 使用html2canvas插件,詳情:http://html2canvas.hertzen.com/ 實例代碼: html <div id="capture" style="padding:

【開源項目】圖片轉換字符畫

默認 添加 sci 放大 pad 結果 source git http 原理 選定填充圖片的ASCII字符,不同的字符對應於不同的灰度 讀取圖片並計算各像素灰度值(同時考慮透明背景),用相應的的ASCII字符替換該像素 程序功能 支持3種文件選擇方式:選定文件(支持圖

UWP DEP0700: 應用程序註冊失敗。[0x80073CF9] 另一個用戶已安裝此應用的未打包版本。當前用戶無法該版本替換打包版本。

.cn 打包 ive 另一個 pan package 用戶 AC size 原文:UWP DEP0700: 應用程序註冊失敗。[0x80073CF9] 另一個用戶已安裝此應用的未打包版本。當前用戶無法將該版本替換為打包版本。最近電腦抽風,我在【應用程序和功能】中重置了以下我

錯誤: 在類 Main 中找不到 main 方法, 請 main 方法定義: public static void main(String[] args) 否則 JavaFX 應用程序類必須擴展javafx.application.Application

導包 javafx 其他 就是 ring del args bsp pub 錯誤: 在類 Main 中找不到 main 方法, 請將 main 方法定義為: public static void main(String[] args)否則 JavaFX 應用程序類必須擴展