1. 程式人生 > >實現HTML5 裁剪圖片並上傳

實現HTML5 裁剪圖片並上傳

個人製作圖片裁剪的問題總結
這裡寫圖片描述
在一個上傳圖片進行列印的專案當中,由於使用者上傳的圖片形狀比例千奇百怪,所以需要前端做一個圖片裁剪功能。剛開始覺得挺簡單的就是做圖片裁剪功能,網上的外掛一大堆,隨便找一個套上就ok啦。
然而,發現了很多問題:
1.外掛的相容性(推薦cropper)
找裁剪外掛過程中是有很多,然而把它們放在手機上測試的時候發現,有些並不能適應手機的觸控效果,安卓和蘋果手機的相容性不好,所以最終選擇了cropper.js
2.在傳資料給後臺的時候發現canvas.toDataURL()會產生特別長的字串,所以想了各種方法,在網上把base64制編碼變成二進位制,
在利用fromData()進行傳遞二進位制檔案給後臺。發現瀏覽器傳遞檔案有限制,後來找了把二進位制變為分片進行傳遞,雖然傳遞過去了,但是發現加重伺服器的負擔也沒有減少後臺的壓力。

3.由於生成的圖片需要邊框,如何給canvas描虛線的邊框
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.strokeStyle="#0000ff";
ctx.setLineDash([6, 6]); //設定虛線長度(虛線長度,虛線間隔)
ctx.strokeRect(20,20,150,100);//繪製虛線的區域

4.drawImage的用法
ctx.drawImage(image, dx, dy);
ctx.drawImage(image, dx, dy, dWidth, dHeight);
ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);
ctx.drawImage(image, 選擇原圖片的起點x座標, 選擇原圖片的起點y座標, 選擇原圖片的寬度, 選擇原圖片的高度, 在畫布開始繪製圖片的起點x座標, 在畫布開始繪製圖片的起點y座標, 在畫布開始繪製圖片的寬度, 在畫布開始繪製圖片的高度);

5.不同的瀏覽器對於上傳的blob資料的大小有不同的限制

總結:
1.利用canvas獲取影象地址傳遞給後臺的限制:影象的大小不要太大最好不要超過2M;
2.可以推薦傳遞裁剪圖片的座標給後臺;
3.前端利用canvas裁剪圖片其實就是生成新的圖片,所以在保證清晰度和圖片相近的時候,會發現生成的圖片質量會比以前的大;
4.利用canvas壓縮圖片也就意味著生成圖片的大小會變的更小;
5.裁剪圖片適合應用於頭像剪輯。重點內容

相關推薦

實現HTML5 裁剪圖片

個人製作圖片裁剪的問題總結 在一個上傳圖片進行列印的專案當中,由於使用者上傳的圖片形狀比例千奇百怪,所以需要前端做一個圖片裁剪功能。剛開始覺得挺簡單的就是做圖片裁剪功能,網上的外掛一大堆,隨便找一

Jquery+HTML5+PHP實現前臺壓縮圖片

先上圖吧: 待上傳 上傳後 功能描述: 使用HTML5在前臺進行圖片壓縮,然後上傳至伺服器上由PHP儲存。此外掛只適用於PC端,未做手機端頁面優化,如果需要應用在手機端請自行優化UI,即然是PC端為什麼還要前端壓縮呢?PC端很容易使用圖片處理軟體進行壓縮,那是適用於

HTML5 本地裁剪圖片至伺服器 canvas圖片 canvas圖片裁剪

很多情況下使用者上傳的圖片都需要經過裁剪,比如頭像啊什麼的。但以前實現這類需求都很複雜,往往需要先把圖片上傳到伺服器,然後返回給使用者,讓使用者確定裁剪座標,傳送給伺服器,伺服器裁剪完再返回給使用者,來回需要 5 步。步驟繁瑣不說,當很多使用者上傳圖片的時候也很影響伺服器

HTML5 本地裁剪圖片至伺服器(老梗)

很多情況下使用者上傳的圖片都需要經過裁剪,比如頭像啊什麼的。但以前實現這類需求都很複雜,往往需要先把圖片上傳到伺服器,然後返回給使用者,讓使用者確定裁剪座標,傳送給伺服器,伺服器裁剪完再返回給使用者,來回需要 5 步。步驟繁瑣不說,當很多使用者上傳圖片的時候也很影響伺服器效

cropper.js 實現裁剪圖片(PC端)

由於之前做專案的時候有需求是需要實現裁剪圖片來做頭像並上傳到伺服器,所以上網查詢了很多資料,也試用了許多案例,發現cropper外掛裁剪是比較完善的,所以結合之前的使用情況,編寫了此案例。本案例是參考cropper站點例項,進行修改簡化。 ##option相

cropper.js 實現裁剪圖片(移動端)

上一篇文章已經編寫了PC端的裁剪圖片案例,這次是涉及移動端的頭像裁剪更換,類似於微信更換頭像功能。。。 思路跟PC端的案例是一樣的,這裡就不多說了。 將案例放到伺服器上,如果出現上傳失敗可能是: 1

如何有效實現前端壓縮圖片功能

res 滿足 utf boot ade 賦值 als 多次 and   隨著現在手機的像素越來越高,很多照片動輒幾兆甚至十幾兆,上傳後在服務器端壓縮已經越來越不能滿足當今的需求。這對於許多技術人員來說,處理起來這樣的問題往往不知道該怎麽下手,那麽下面就跟大家講解一下如何在前

JS+HTML5實現前端的圖片壓縮到騰訊的COS

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <meta name="viewport" content="w

html5預覽圖片的功能

html5支援圖片預覽 具體程式碼:上傳頁面 upload_h5.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>使用html5

Xamarin.Android 壓縮圖片到WebServices

越來越大 () exists jpeg color 文件寫入 data pen map   隨著手機的拍照像素越來越高,導致圖片贊的容量越來越大,如果上傳多張圖片不進行壓縮、質量處理很容易出現OOM內存泄漏問題。   最近做了一個項目,向webservices上傳多張照片,

微信小程序實現多張圖片同時的方法

地址 complete 就是 name func pre files success fun 對於微信小程序上傳圖片其實很麻煩的,每次只能上傳一張,所有很多朋友就會問想要多張圖片上傳怎麽辦?這裏使用遞歸,當上傳完一張圖片後重新執行這個函數,直到所有的圖片都上傳完成後,就不再

javaScript:壓縮圖片

html程式碼: <input id="file" type="file" name="filesName"> js程式碼: var fileElement = document.getElementById('#file'); fileElement.

java接收圖片(接收)

enctype屬性 我們平常在使用form表單時會有一個enctype屬性,其預設是application/x-www-form-urlencoded w3c對這個編碼的定義是空格轉換為 "+" 加號,特殊符號轉換為 ASCII HEX 值,http伺服器是使用ASCII

FileUpload選擇圖片

在上傳按鈕的事件裡: //檔案上傳         protected void btn_Click(object sender, EventArgs e)         {             if (FileUpload1.HasFile)//判斷是否存

如何在前端選擇本地圖片

      好懶。。。。。      先寫前端的,比較簡易的標準照片上傳方法       <input id="ss" name="ss" type="file"/> &nbs

egg-ueditor,基於egg的UEditor百度編輯器後端實現,支援圖片/檔案、列表及圖片遠端抓取

egg-ueditor 基於egg的UEditor百度編輯器後端實現,支援圖片/檔案上傳、列表及圖片遠端抓取 原始碼:https://github.com/inmyjs/egg-ueditor 安裝 npm install egg-ueditor --save 使用方

根據base64轉換成圖片伺服器

package com.hzlq.appfactory.common.util; import it.sauronsoftware.base64.Base64; import java.io.ByteArrayInputStream; import jav

利用canvas壓縮圖片

一 前言 最近負責的H5中,有個上傳照片的功能,照片是上傳到阿里雲。大家可能知道,手機拍到照片一般都較大,而伺服器限制了上傳圖片的大小(伺服器好像是可以設定這個大小的),於是開始研究利用canvas壓縮圖片,當然你也可以利用外掛。廢話不多說,只要你仔細看完,保證你能成功。 二 程式碼 HTML

cropper.js裁剪圖片圖片

//html <img src="{{ Auth::user()['avater'] }}" id="avater" style="border: none; visibility: visible; margin: 0px; padding: 0px; position: absolute

呼叫系統相機、相簿、剪裁圖片(常用於頭像,相容Android7.0)

轉載請註明出處文章地址 本文轉自Hansion的部落格 由於在Android 7.0 採用了StrictMode API政策禁,其中有一條限制就是對目錄訪問的限制。 這項變更意味著我們無法通過File API訪問手機儲存上的資料,也就是說,給其他應用傳