应用场景:

仓库每次发货需要打印标签, Canvas根据从数据库读取的产品信息可以生成标签JPG, 但是这个JPG图片的默认分辨率(DPI)是72

这个DPI太低, 导致打印出来的图片会很模糊.

修改DPI的常规做法是把图片上传到服务器用C#修改DPI后再下载到服务端

但是心里觉得很憋屈, 分明已经在客户端生成了图片, 仅仅为了修改一个很小的标记(DPI信息只是JPEG格式的一个头部META)要上传一张很大的图片到服务端折腾一遭.

后来使用了下面的方法

用JavaScript直接修改了DPI

这里不贴源码, 仅提供解决思路, 希望需要的朋友自己亲手试一下

既然知道DPI只是JPEG格式的头部信息, 并且是很小的一部分, 而base64属于流编码, 那么canvas.toDataURL()以后的base64字符串中, 这个DPI信息所处的位置应该也是固定的

  1. 用图片处理程序(我用的是Fireworks)生成两张内容一样的JPG图片, 仅修改其DPI, A图片的DPI是72, B图片的DPI是300
    这里为了确认起见, 使用UE对比一下两个文件, 确实只有头部几个字节不一样
  2. 用C#读取A/B图片, 分别编码成BASE64, 生成A.txt和B.txt
  3. 用UE或其他文本编辑器对比两个文本文件, 找出不一样的部分, 你会发现只有靠近头部的不到10个字符不一样
  4. 重复以上实验, 用不同的图片, 会发现最后总是那固定的几个字符不一样, 并且只要DPI一样, 那固定位置的几个字符也是一样的
  5. 在浏览器端用canvas.toDataURL生成jpg图片的base64字符, 然后修改字符中刚才固定位置的字符为测试时DPI为300的特征字符

OK, 现在你已经获得了一个DPI为300的JPG图片了.

有兴趣的朋友可以去研究一下BASE64编码, 然后做成一个函数来计算不同DPI所对应的特征字符

至于二进制状态的那几个自己, 用计算器按一下就会发现那就是直接存储的DPI数值

MORE:

在公司的项目中, 操作人员每次不同批次的图片会习惯于保存在一个固定的文件夹里, canvas生成的图片另存为的时候默认文件名总是 canvas.jpg

这里如果使用它们所习惯的批次号.jpg作为保存的默认文件名体验会好很多

这里有两种方案,

  1. 去Google找一个叫做downloadify的Flash组件, 可以保证点击"下载"按钮的时候跳出一个选择保存位置的对话框, 并且默认的文件名可以用js指定
  2. 使用HTML5的download属性加在A标签里, 这个方案更简单, 不过Firefox/Chrome会直接保存到默认下载位置, 不会让用户选择, 而右键另存为又会失去默认文件名的作用

两种方案各有利弊吧, 具体看操作人员的使用习惯

转载于:https://www.cnblogs.com/xiarugu/p/canvas-dpi.html

用JavaScript修改Canvas图片的分辨率(DPI)相关推荐

  1. html5怎么修改图片大小,HTML5 javascript修改canvas的大小

    方法1: 设定固定的值,这种方式跟在html中设定canvas的值没有什么区别: window.onload = function(){ canvas.height = 100; canvas.wid ...

  2. WPF 设置图片的分辨率DPI

    WPF 修改图片的分辨率/DPI 在WPF中,当使用到PNG之类的图片作为背景时.我发现一个问题:图片属性(Windows)的宽.高相同的两张图片在WPF界面上显示却大小不一.如下图所示. 在后台应用 ...

  3. python批量修改图片的分辨率dpi值

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.必备条件 二.完整代码 总结 前言 很多论文和期刊,对文中插入图片的格式.色彩.图片大小.分辨率(dpi值)都有要 ...

  4. HTML5 javascript修改canvas的大小

    方法1: 设定固定的值,这种方式跟在html中设定canvas的值没有什么区别: window.onload = function(){canvas.height = 100;canvas.width ...

  5. 怎么提高图片分辨率dpi?电脑图片怎么修改分辨率?

    网络平台上找到适用的图片素材,使用时却发现图片分辨率偏低,会影响到图片效果,这时候我们可以采取提高图片分辨率的方式来解决问题,那么如何改图片分辨率(https://www.yasuotu.com/dp ...

  6. 获取jpg图片的x,y的分辨率dpi

    获取jpg图片的x,y的分辨率dpi Delphi / Windows SDK/API http://www.delphi2007.net/DelphiMultimedia/html/delphi_2 ...

  7. php 修改图片dpi,PHP修改PNG图片DPI

    最近使用PHP生成图片用于打印,但是浏览器默认输出为72DPI,打印要求为300DPI,如果直接打印,图片会比较模糊. 在网上找了一圈,大部分链接都指向ImageMagick,但是我的项目部署在新浪S ...

  8. 手机怎么提高图片分辨率?手机怎么改照片分辨率dpi?

    现在有很多考试可以通过手机提交报名,在报名时需要上传证件照,但是最近有很多小伙伴说上传的照片尺寸.背景颜色都符合要求了但是还是提示上传失败,那么这种情况往往就是由于照片分辨率不符合要求导致的,那么手机 ...

  9. 图片1920x1080分辨率怎么调 ?图片如何修改分辨率?

    图片是我们日常生活中经常需要使用到的东西,但是在使用图片时我们会遇到需要调图片分辨率的情况,有很多小伙伴对于图片分辨率这个概念并不了解,今天就来为大家具体介绍一下图片1920x1080怎么调以及怎么给 ...

最新文章

  1. 彩色空间及cvtColor解析
  2. winpcapp配置c++网口通讯_MES、SCADA项目中的数据采集—基于C#与研华IO模块ModbusTCP通讯...
  3. 函数式编程——做到并发,不可变数据修改就只能复制后修改返回
  4. 2012-2013年下学期计划
  5. go defer 语句会延迟函数的执行直到上层函数返回。
  6. Tomcat部署(转)
  7. android studio gradle home,Android Studio3.0 Gradle 4.1配置
  8. PyQt5学习笔记02----初探Qt Designer 设计师
  9. 电子工业出版社博文视点在2010年系统架构师大会上集锦
  10. hadoop2.2.0 core-site.xml--global properties
  11. 数据库索引是什么,它的作用是什么?
  12. Python-GeoPandas地图、专题地图绘制
  13. word页眉页脚修改
  14. c语言删除字符串中特定字符串,C语言删除字符串中指定字符的例子
  15. 业务知识 - 金融知识笔记
  16. Windows命令行解决8080端口被占用
  17. python中selenium关于滚动条的循环下拉滚动操作---滚动条操作
  18. 【百度、高德】模仿房产酒店网站——自定义标注窗口
  19. 木棒拼图(有一个由很多木棒构成的集合,每个木棒有对应的长度,请问能否用集合中的这些木棒以某个顺序首尾相连构成一个面积大于 0 的简单多边形且所有木棒都要用上,简单多边形即不会自交的多边形。)
  20. 【Linux vim 入门及渐进过程2 - vim 常用插件配置】

热门文章

  1. 用C#实现MVC(Model View Control)模式介绍
  2. LeetCode(897)——递增顺序查找树(JavaScript)
  3. 句句真研—每日长难句打卡Day10
  4. 【jQuery学习】—jQuery对象的串联
  5. MySQL提供链接途径_MySQL 连接
  6. 人到中年生活不易,特别是工作压力很大
  7. lte和4g有什么区别
  8. 你以为写小说就只有一种签约方式?
  9. 如果你选择城市创业的话,可以先从小本生意做起
  10. Lei Jun‘s first response to the