`
暴走的酱油瓶
  • 浏览: 11170 次
  • 性别: Icon_minigender_1
  • 来自: 酱油厂
社区版块
存档分类
最新评论

html5对图片的支持

 
阅读更多

以前要想在图片上传前,对图片剪裁下,纯用js的话,很难实现。现在有了html5了,腰也不疼了,腿也不抽筋了。

主要用到html5的2个特性:

 

1、FileReader

FileReader可以把本地文件进行读取并且转化为Base64编码的数据,很便于在html页面里显示。

 

2、canvas

对图片的放大缩小啊,左移右移啊,实现起来很简单。尤其是它还可以对图片的像素进行操作(红、绿、蓝、透明),最后利用toDataURL方法用图片进行剪裁。美中不足的话,目前还不支持gif格式,有点小遗憾。

 

下面是我写的一个简易小例子的片段(完整代码在附件里)

 

选择图片用的是

 

<input id="upload" type="file" />
 

 

选择文件生成Base64及图片加载后初始化canvas的代码:

 

var upload = $('#upload');
upload.change(function (e) {
    e.preventDefault();

    var file = upload[0].files[0],
    reader = new FileReader();
    reader.onload = function (event) {
        img.src = event.target.result;
        var result = img.src.toString().match(/^data:(image\/[a-z+]+);base64,/);
        if (result) {
            imgType = result[1];
        }

    };
    reader.readAsDataURL(file);

    return false;
});

img.onload = function () {
    var min = Math.min(img.width, img.height);
    scale = (bWH - 2 * borderWH) / min;
    $('#range').attr('min', scale * 100);
    // 判断下可放缩的范围
    if (min >= (bWH - 2 * borderWH)) {
        $('#range').attr('max', 100);
    }
    else {
        $('#range').attr('max', scale * 100)
    }
    canvasScale(true, scale);
    $('#range').val(scale * 100);
}

 

 

对图片放缩时,我没有使用canvas的scale方法,因为它会把canvas的大小也一起放缩了,和我想实现的需求不符。我利用的是canvas的drawImage的方法。放大就把dw、dh相应放大,缩小就相应缩小达到类似的效果。

 

function canvasScale(init, num) {
    var w = img.width;
    var h = img.height;
    scale = num;
    dw = w * scale;
    dh = h * scale;
    if (init) {
        dx = 0;
        dy = 0;
        if (bWH > dw) {
            dx = (bWH - dw) / 2;
        }
        if (bWH > dh) {
            dy = (bWH - dh) / 2;
        }
    }
    else {
        if (dx > borderWH) {
            dx = borderWH;
        }
        else if (dx < bWH - borderWH - dw) {
            dx = bWH - borderWH - dw;
        }
        if (dy > borderWH) {
            dy = borderWH;
        }
        else if (dy < bWH - borderWH - dh) {
            dy = bWH - borderWH - dh;
        }
    }
    // 大图
    ctx.clearRect(0, 0, bWH, bWH);
    ctx.drawImage(img, 0, 0, w, h, dx, dy, dw, dh);
    // 大图四周的框
    canvasPadding(ctx, borderWH, bWH);

    // 小图
    ctxSmall.clearRect(0, 0, sWH, sWH);
    ctxSmall.drawImage(img, (15 - dx) / scale, (15 - dy) / scale,
        (bWH - 2 * borderWH) / scale, (bWH - 2 * borderWH) / scale,
        0, 0, sWH, sWH);
}

 

 

最后就剩下一个截取功能了

 

function canvasToDataURL() {
    var canvasTmp = document.createElement('canvas');
    canvasTmp.width = bWH - 2 * borderWH;
    canvasTmp.height = bWH - 2 * borderWH;
    var ctxTmp = canvasTmp.getContext('2d');
    ctxTmp.drawImage(img, (15 - dx) / scale, (15 - dy) / scale,
        (bWH - 2 * borderWH) / scale, (bWH - 2 * borderWH) / scale,
        0, 0, canvasTmp.width, canvasTmp.height);
    // 像素操作
    var imgPixels = ctxTmp.getImageData(0, 0, canvasTmp.width, canvasTmp.height);
    var lenW = imgPixels.width;
    var lenH = imgPixels.height;
    var red = $('#red').val();
    var green = $('#green').val();
    var blue = $('#blue').val();
    var opacity = $('#opacity').val();
    for (var y = 0; y < lenH; y++) {
        for (var x = 0; x < lenW; x++) {
            imgPixels.data[4 * (y * lenW + x) + 0] *= red;
            imgPixels.data[4 * (y * lenW + x) + 1] *= green;
            imgPixels.data[4 * (y * lenW + x) + 2] *= blue;
            imgPixels.data[4 * (y * lenW + x) + 3] = opacity;
        }
    }
    ctxTmp.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);
    // 生成对应类型的图片
    return canvasTmp.toDataURL(imgType);
}
 

测试如下:

ff,chrome,mx3都支持FileReader和canvas。

mx3下FileReader还有点问题,估计日后会改好。

chrome本地安全问题,需要放到服务器上才能看效果。

ff目前对<input type="range" />还不支持。

分享到:
评论

相关推荐

    (最新版本)HTML5批量图片上传插件支持多个图片上传功能

    其中一个显著的改进就是对文件上传的支持,尤其是批量图片上传功能。在传统的HTML4中,文件上传通常只能单个进行,而HTML5引入了新的API和特性,使得批量上传成为可能。 批量图片上传的核心是`&lt;input type="file"&gt;`...

    html5 div图片放大插件手机端图片放大预览效果

    html5 div图片放大插件手机端图片放大预览效果 html5 div图片放大插件手机端图片放大预览效果 html5 div图片放大插件手机端图片放大预览效果 html5 div图片放大插件手机端图片放大预览效果

    图片轮播HTML5

    【HTML5图片轮播插件】是一种常见的网页交互元素,用于在网页上展示一组图片,以动态、自动或用户触发的方式进行切换。这种技术利用了HTML5的新特性,结合JavaScript库如jQuery,来提供跨平台的兼容性和丰富的用户...

    HTML5无限循环滚动图片展示

    HTML5是一种先进的网页标记语言,它为网页开发者提供了丰富的功能和强大的工具,使得网页制作更加高效、...开发者可以通过学习和理解这个插件的实现,提升自己的前端开发技能,尤其是对HTML5和CSS3动画的理解与应用。

    html5手机端上传图片

    HTML5是现代网页开发的重要标准,它为网页应用带来了许多增强功能,其中之一就是对手机端图片上传的支持。在移动设备上,用户可能希望通过点击或拖拽来上传照片,或者从设备的媒体库中选择图片。以下是对这个主题的...

    支持手机触屏左右拖拽滑动图片_html5左右滑动图片切换插件

    总之,"支持手机触屏左右拖拽滑动图片_html5左右滑动图片切换插件"是HTML5与JQUERY结合的一个实例,它通过监听触屏事件和智能处理图片切换,为移动用户提供了流畅的交互体验。开发者可以根据自己的需求调整和扩展此...

    html5去掉图片背景颜色

    ### HTML5去掉图片背景颜色 在HTML5中,去除图片背景颜色主要涉及到Canvas元素的应用以及JavaScript的编程技术。本文将详细介绍如何利用HTML5 Canvas技术来实现去除图片背景颜色的效果。 #### 一、HTML5 Canvas...

    html5实现的图片滚动效果

    综上所述,HTML5通过其语义化元素、CSS3动画、JavaScript API和单页应用技术,为我们提供了实现图片滚动效果的强大支持。这种效果不仅可以提升用户体验,还可以使网站内容更加生动、吸引人。通过深入学习和实践这些...

    html5图文布局点击图片弹出放大查看特效

    例如,可以使用Modernizr这样的库来检测浏览器对HTML5特性的支持情况,从而提供适当的回退方案。 总的来说,“HTML5图文布局点击图片弹出放大查看特效”涉及到了HTML5的`&lt;img&gt;`标签、CSS3的`transform`和`...

    HTML5图片描述

    HTML5是下一代超文本标记语言,它在2004...随着浏览器对HTML5支持的不断改进,开发者能够构建更加丰富、交互性更强的网络应用,而无需依赖第三方插件。随着移动互联网的发展,HTML5也成为了跨平台应用开发的重要选择。

    html5实现页面的显示本地图片

    在“html5实现页面的显示本地图片”这个主题中,我们主要关注的是HTML5的`&lt;input type="file"&gt;`标签以及File API,它们允许用户选择本地图片并在网页上预览或处理。 **1. `&lt;input type="file"&gt;`标签** `...

    HTML5 实现本地图片裁剪

    在“HTML5 实现本地图片裁剪”这个主题中,我们将深入探讨如何利用 HTML5 的 canvas 元素和 File API 来实现在本地浏览器环境中对图片进行裁剪操作。 首先,HTML5 的 `&lt;canvas&gt;` 元素是一个可编程的图形画布,允许...

    html5+js(支持手机页面)图片懒加载

    HTML图片懒加载,亲测可用,插件也比较小,使用起来挺方便的.根据jquery 提供的 lazyload.js 插件实现图片懒加载,demo 在最下面。 lazyLoading.js 可以缓解庞大项目的网络压力lazyLoading.js图片懒加载

    HTML5图片展示

    `&lt;img&gt;`元素在HTML5中也得到了改进,支持了新的属性,如`srcset`和`sizes`,这些属性可以根据用户的设备和屏幕尺寸,自动选择最适合的图片资源,从而实现响应式图片加载,提高网页性能。同时,`&lt;img&gt;`的`alt`属性...

    html2pdf支持图片及中文

    5. **使用GitHub资源**:在GitHub上的`cychai/html2pdf`仓库,你可以找到更复杂的示例代码,这些示例通常包含了更多的配置选项和功能,比如自定义页面大小、水印、表格等,有助于你更好地理解和使用HTML2PDF。...

    HTML5 base64 图片下载

    HTML5 base64 图片下载 参考文档 http://blog.csdn.net/fenglailea/article/details/56488096

    HTML5通过swiper实现图片预览

    HTML5是一种强大的网页开发语言,它为网页开发者提供了丰富的功能和接口,其中之一就是对多媒体的支持。在本场景中,我们关注的是如何利用HTML5和一个名为Swiper的第三方库来实现图片预览功能。Swiper是一款流行的...

    uploadify H5版(uploadifive)基于html5的手机上传图片插件

    【标题】"uploadify H5版(uploadifive)基于html5的手机上传图片插件"涉及的关键技术点包括HTML5、Uploadify、uploadifive和.NET后端处理。Uploadify是一个JavaScript上传组件,而其H5版本uploadifive则是针对现代...

    html5图片上传支持拖动图片上传-批量图片上传插件

    HTML5图片上传功能是现代网页应用中的一个重要特性,它提供了对拖放操作的支持,使得用户可以方便地将本地图片直接拖放到网页上进行上传。批量图片上传插件则进一步优化了这一过程,允许用户一次性上传多张图片,...

Global site tag (gtag.js) - Google Analytics