国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

圖片上傳縮略圖預(yù)覽

Pocher / 2417人閱讀

摘要:目標(biāo)畫(huà)布的左上角在目標(biāo)上軸的位置。允許對(duì)繪制的圖像進(jìn)行縮放。如果不說(shuō)明,在繪制時(shí)圖片高度不會(huì)縮放。如果不說(shuō)明,整個(gè)矩形從坐標(biāo)的和開(kāi)始,到圖像的右下角結(jié)束。需要繪制到目標(biāo)上下文中的,源圖像的矩形選擇框的高度。

在上傳圖片進(jìn)行預(yù)覽時(shí),直接抓取原圖時(shí)由于原圖過(guò)大會(huì)影響性能,即對(duì)所上傳圖片進(jìn)行壓縮小圖展示;

思路: 利用 canvas 對(duì)原圖進(jìn)行壓縮重繪,抓取區(qū)域以中心為基點(diǎn)最大范圍繪制縮略圖;

對(duì)input[file]進(jìn)行事件綁定
// 監(jiān)控 file 變化
imgfile.addEventListener("change", function () {
    ...
}
利用 FileReader 讀取上傳的圖片
var reader = new FileReader()
reader.onload = function () {
    ...
}
reader.readAsDataURL(file);
創(chuàng)建 canvas、image,并獲取寬高
var canvas = document.createElement("canvas");
// 設(shè)置 canvas 畫(huà)布大小
canvas.width = thumbnailWidth, 
canvas.height = thumbnailHeight;

var ctx = canvas.getContext("2d");
var thumbnailItem = new Image();

//獲取圖片寬高
thumbnailItem.onload = function () {
    var imgWidth = this.width,
        imgHeight = this.height,
        drawWidth = "",
        drawHeight = "",
        dx,
        dy;
}
對(duì)原圖進(jìn)行寬高分析,最大化展示原圖區(qū)域
// 判斷原圖寬高
if (imgWidth > imgHeight) {
    drawWidth = drawHeight = imgHeight;
    dx = (imgWidth - imgHeight) / 2, dy = 0
} else {
    drawWidth = drawHeight = imgWidth;
    dx = 0, dy = (imgHeight - imgWidth) / 2
}
進(jìn)行繪制縮略圖
//void ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);

ctx.drawImage(thumbnailItem, dx, dy, drawWidth, drawHeight, 0, 0, thumbnailWidth, thumbnailHeight)

//dx
//目標(biāo)畫(huà)布的左上角在目標(biāo)canvas上 X 軸的位置。
//dy
//目標(biāo)畫(huà)布的左上角在目標(biāo)canvas上 Y 軸的位置。
//dWidth
//在目標(biāo)畫(huà)布上繪制圖像的寬度。 允許對(duì)繪制的圖像進(jìn)行縮放。 如果不說(shuō)明, 在繪制時(shí)圖片寬度不//會(huì)縮放。
//dHeight
//在目標(biāo)畫(huà)布上繪制圖像的高度。 允許對(duì)繪制的圖像進(jìn)行縮放。 如果不說(shuō)明, 在繪制時(shí)圖片高度不//會(huì)縮放。
//sx
//需要繪制到目標(biāo)上下文中的,源圖像的矩形選擇框的左上角 X 坐標(biāo)。
//sy
//需要繪制到目標(biāo)上下文中的,源圖像的矩形選擇框的左上角 Y 坐標(biāo)。
//sWidth
//需要繪制到目標(biāo)上下文中的,源圖像的矩形選擇框的寬度。如果不說(shuō)明,整個(gè)矩形從坐標(biāo)的sx和sy開(kāi)//始,到圖像的右下角結(jié)束。
//sHeight
//需要繪制到目標(biāo)上下文中的,源圖像的矩形選擇框的高度。

生成base64
// 生成base64
dataUrl = canvas.toDataURL()
核心代碼
// 監(jiān)控 file 變化
imgfile.addEventListener("change", function () {

    if (!this.files.length) return;

    var files = Array.prototype.slice.call(this.files);

    if (files.length > maxQuantity) {
        alert("最多同時(shí)只可上傳100張圖片");
        return;
    }

    files.forEach(function (file, i) {

        var reader = new FileReader(),
            dataUrl = "";
        reader.onload = function () {
            var canvas = document.createElement("canvas");
            // 設(shè)置 canvas 畫(huà)布大小
            canvas.width = thumbnailWidth, canvas.height = thumbnailHeight;

            var ctx = canvas.getContext("2d");
            var thumbnailItem = new Image();

            // 添加原圖 url 至數(shù)組
            // imgUrls.push(this.result);
            imgUrls[i] = this.result
            thumbnailItem.onload = function () {
                var imgWidth = this.width,
                    imgHeight = this.height,
                    drawWidth = "",
                    drawHeight = "",
                    dx,
                    dy;
                // 判斷原圖寬高
                if (imgWidth > imgHeight) {
                    drawWidth = drawHeight = imgHeight;
                    dx = (imgWidth - imgHeight) / 2, dy = 0
                } else {
                    drawWidth = drawHeight = imgWidth;
                    dx = 0, dy = (imgHeight - imgWidth) / 2
                }

                // console.log("dx :" + dx, "dy: " + dy, "drawWidth :" + drawWidth, "thumbnailWidth :" + thumbnailWidth, "thumbnailHeight :" + thumbnailHeight)
                ctx.drawImage(thumbnailItem, dx, dy, drawWidth, drawHeight, 0, 0, thumbnailWidth, thumbnailHeight)

                // 生成base64
                dataUrl = canvas.toDataURL()

                // thumbnaiUrls.push(dataUrl)
                thumbnaiUrls[i] = dataUrl
                var imglist =
                    "
" + "" + "" + "
" + "
"; $("#imgList").append(imglist) } thumbnailItem.src = this.result console.log("縮略圖") console.log(thumbnaiUrls) console.log("原圖") console.log(imgUrls) }; reader.readAsDataURL(file); }) })
總結(jié)

需要注意 drawImage 需要放在 onload 的回調(diào)函數(shù)里面,避免圖片還未加載完成被繪制出來(lái),即出現(xiàn)圖片一片空白;

如有錯(cuò)誤或不足,歡迎指出

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/93264.html

相關(guān)文章

  • Bootstrap FileInput(文件上傳)中文API整理

    摘要:默認(rèn)為選擇上傳的文件數(shù)超出了允許的最大限制。在這種情況下,每一個(gè)人選擇的文件被上傳成功后,觸發(fā)事件。此事件僅在上傳和完成同步或異步批量上傳后觸發(fā)。 下載地址、API和DOM地址(英語(yǔ)好的小伙伴可以看看) 下載地址:https://github.com/kartik-v/b...API文檔 :http://plugins.krajee.com/fil...D E M O:http://p...

    TwIStOy 評(píng)論0 收藏0
  • PHP微信公眾號(hào)開(kāi)發(fā)——群發(fā)消息(完結(jié))

    摘要:關(guān)于上傳圖文消息素材和新增永久圖文素材的區(qū)別上傳圖文消息素材等于是直接把圖文素材傳到微信的服務(wù)器,每次憑借獲取素材,并且不占用素材庫(kù)新增永久圖文素材在開(kāi)發(fā)者和微信服務(wù)器之間,多了一個(gè)素材庫(kù)。 **說(shuō)明1.文章和有道筆記幾乎內(nèi)容相同,所以如果有人在有道上有幸看到一樣的文章,應(yīng)該也是我寫(xiě)的,除非是全部復(fù)制2.內(nèi)容會(huì)較長(zhǎng),故會(huì)拆分多篇文章講解3.目前基本的群發(fā)已記錄完結(jié),如果后續(xù)有補(bǔ)充,會(huì)作...

    bbbbbb 評(píng)論0 收藏0
  • 慕課網(wǎng)_《Java實(shí)現(xiàn)等比例縮略》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期六說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。可以更加專(zhuān)注于業(yè)務(wù)邏輯開(kāi)發(fā),縮短項(xiàng)目開(kāi)發(fā)周期,提高項(xiàng)目開(kāi)發(fā)速度。 時(shí)間:2017年07月15日星期六說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無(wú)學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 在用戶進(jìn)行信息概略瀏覽的時(shí)候,提供縮...

    raledong 評(píng)論0 收藏0
  • 一步一步搭建一個(gè)上傳網(wǎng)站(后臺(tái)服務(wù)器用nodejs)

    摘要:把文件上傳路徑指定到然后用當(dāng)前日期和文件名命名上傳過(guò)來(lái)的文件。后端利用建立服務(wù)器,利用中間件指定文件路徑。利用這個(gè)前端和后端技術(shù),我們基本上就可以做出一個(gè)圖片上傳存儲(chǔ)的基本網(wǎng)站核心。 前幾天看了騰訊云社區(qū)的一個(gè)文件上傳的文章文件上傳那些事兒,大體上講了以下h5中圖片上傳的幾個(gè)核心原理,但是沒(méi)有后端接受的服務(wù)器代碼,沒(méi)法做測(cè)試。也沒(méi)有具體的一個(gè)實(shí)例都是一些基本的原理片段,并且ui界面也不...

    Darkgel 評(píng)論0 收藏0
  • ThinkPHP3.2+Krpano實(shí)現(xiàn)全景

    摘要:為了實(shí)現(xiàn)全立體的全景圖效果,我們采用了軟件將普通魚(yú)眼圖片渲染為全景圖說(shuō)明代碼有過(guò)調(diào)整,并不能保證運(yùn)行,主要說(shuō)明實(shí)現(xiàn)思路。顯示全景圖要將圖片顯示出來(lái),我們必須按照規(guī)則生成必須的配置文件。我們將根據(jù)上傳圖片是生成的唯一碼作為依據(jù)生成全景圖。 為了實(shí)現(xiàn)全立體的3D全景圖效果,我們采用了Krpano軟件將普通魚(yú)眼圖片渲染為720°全景圖 說(shuō)明:代碼有過(guò)調(diào)整,并不能保證運(yùn)行,主要說(shuō)明實(shí)現(xiàn)思路。首...

    My_Oh_My 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<