8

2016-12-31 00:58:23 +08:00   3

如果是 JPG 就可以用贱招.

首先你只要存原始尺寸图片.但一定要是 JPG 渐进式格式.存档品质不要超过 85 比较好.这个 php 本身就有支援.

然后重点.输出的时候用串流输出. 意思就是 php 读取图片用串流(BYTE)的.不要解读图片

然后 php 控制输出也是串流的.但输出多少要自己控制.

例如你只要 4 分之 1 的大小=长宽减半的大小.

你就先取得整个档案的大小.计算 4 分之一的档案长度.

然后串流输出的时候.到达 4 分之 1 的输出后.直接截断.关闭串流.

用户端需要稍微用 html 控制一下.直接指定显示的长宽.

因为实际上你输出的还是原始尺寸.

而对方收到的图片清晰度却没有达到全部.但一定超过 4 分之一的需求.

所以看不出有问题.但计算消耗只有第一次的存档.输出频宽消耗也只有 4 分之 1.

验证方法是随便产出一些 渐进式品质 75~85 的 JPG 图片.直接用档案切割软体或是 16 进制的编辑软体截断档案.

然后将截断的前面用看图软体打开.

用 4 分之一大小看基本上没问题.但用原始尺寸看就可以看到破损.

有研究 JPEG 格式就知道.渐进式的话.他有一个一个的段落.每个段落都会让图片慢慢清晰.而且后面的不存在也没关系.只是解码会终止.但可以正常显示前面.

如果有搭配 imagemagick 或类似的软体存档.可以给他更多参数.

例如黑白灰(YUV 的亮度 Y)正确性比彩色(UV 部分)重要.下参数让 Y 全部在前然后才是 UV.

他就会变成 YYYYUUUUVVVV(第一层.最模糊) YYYYUUUUVVVV (第 2 层某一块.是第 1 层的局部补正) YYYYUUUUVVVV (第 2 层某一块.是第一层的局部补正) YYYYUUUUVVVV (第 3 层某一块.是第 2 层的局部补正) YYYYUUUUVVVV (第 3 层某一块.是第 2 层的局部补正) .....直到最后一层.

如过颜色比较重要那就下参数让 YUV 混合.就变成 YUVYUVYUVYUV(第 1 层) YUVYUVYUVYUVYUVYUVYUVYUV(第 2 层)....以此类推.

每一层有几块是编码器决定的.而且还分算数二进算法或是金字塔算法.所以不好计算你要的尺寸要切到哪一层.干脆直接截断.

金字塔算法是预设的因为效率更高但较复杂难预测. 算数二进比较简单.可预测但档案较大.

以上就是不换设备但有高解析度到低解析度需求的解决方案.

缺点是用户很喜欢你的图片存下来看原图他会翻白眼.因为截断的瑕疵就会露出来.

这里的补充解法是. 图片旁边写 JS 下载语法.

参考范例(繁)

http://www.ladesign.tw/paper/info/jquery_html2canvas_download

他是按照标签产图.你就选图片的那个标签名称就可以.他会产生"用户看见"的大小的图片.

等于是用户浏览器自己重新编码一个图片了.大小比用户看见的小一些(我也不懂原因哈哈哈).

但是不会有破图瑕疵.

以上是我的自建图床解.

php 动态输出图片尺寸,高并发下 php 输出图像对性能开销大不大?相关推荐

  1. vue-preview动态获取图片宽高并增加旋转功能

    vue-preview是一个常用的图片查看器,微博网页版就是用的这个插件: 我在项目中也用过这个插件,总体来说,还是比较满意.但是缺少一个图片旋转功能. 安装使用 第一步:安装 npm i vue-p ...

  2. 【Spring】高并发下如何提高“锁”性能?

    高并发下如何提高"锁"性能? 前言 减小锁持有时间 减小锁粒度 读写分离锁来替换独占锁 锁分离 锁粗化 总结 前言 在项目中,尤其是电商或者做游戏开发的,高并发是必然的,但在高并发 ...

  3. Glide获取网络图片宽高,并动态设置图片宽高

    ​ 因Android手机屏幕尺寸较多,当imageview宽设置match_parent,高固定时.会导致图片拉伸或裁剪.目前可通过获取图片宽高,动态设置imageview宽高比例,等比例缩放图片. ...

  4. 动态获取图片尺寸-uniapp

    uni.getImageInfo({src: res.tempFilePaths[0],success: function (image) {console.log(image.width);cons ...

  5. vue移动端通过px动态计算图片宽高_vue图片宽高自适应_移动web图片高度自适应的解决方案...

    由于图片的加载是在dom加载完成之后进行的,于是,在手机端浏览网页时,经常会看到页面刚打开时很多内容叠在一起,当图片加载完成后,页面会由于图片加载完成出现明显的抖动 针对这个问题,有以下几种解决方案 ...

  6. 卷积层的相关概念 与 卷积层输出图片大小计算

    本文内容 常见问题:听课时感觉听懂了,一些代码,发现啥都不懂,各个参数的数值应如何指定呢? 本文会以Pytorch为例,讲解CNN过程中各个参数应如何计算 卷积层的相关概念 图片的channel:图片 ...

  7. css控制图片拉伸不变形,css+background实现 图片宽高自适应,拉伸裁剪不变形

    图片宽高不固定 ,一样实现自适应,拉伸裁剪不变形,适应各大兼容性. 下面咱们在网上找两张宽高不一样的照片: No.1                                          ...

  8. php 如何输出一张图片,php怎么输出图片?

    这是我做的,php+mysql,根据数据库中的数据动态输出图片 $cn=mysql_connect('localhost','root',''); $strsql="select * fro ...

  9. CV之IG之Inception:基于TF框架利用Inception模型+GD算法的某层网络图像生成带背景的不同尺寸高质量的Deep Dream幻觉梦境图片(特征可视化实现图像可解释性)案例

    CV之IG之Inception:基于TF框架利用Inception模型+GD算法的某层网络图像生成带背景的不同尺寸高质量的Deep Dream幻觉梦境图片(特征可视化实现图像可解释性)案例 目录 基于 ...

最新文章

  1. 利用python实现简易版的贪吃蛇游戏(面向python小白)
  2. 教您怎么从spring 官网下载参考文档
  3. Python 自动化-pywinauto遍历展示程序的所有菜单项,菜单栏menu_select()操作方法的使用
  4. qt获取开发板ip地址_qt获取网络ip地址的类
  5. 在Visual Studio中构建启动时申请管理员权限的程序(UAC支持)
  6. MySQL + Atlas 部署读写分离
  7. java tcp发消息给硬件_java – TCP客户端/服务器通信只发送第一条消息?
  8. android 代码设置textview draw,Android 自定义气泡TextView
  9. python第十八天
  10. String 创建对象问题
  11. java数组包含某个值_如何检查Java数组是否包含值?
  12. 关于产品经理对Axure的应用
  13. Sqlmap命令讲解
  14. CI 与 CD 有什么区别
  15. 如何打断制图中的CAD图形?
  16. 【MySQL】-SQL-统计数据的表格个数
  17. uni-app的使用分享(一)
  18. 验证“哥德巴赫猜想 - C/C++ 分支与循环
  19. ZOJ 3987 Numbers 2017CCPC秦皇岛站G题 大整数 二进制 贪心
  20. 使用FastJson进行驼峰下划线相互转换写法及误区

热门文章

  1. 前端学HTTP之网关、隧道和中继
  2. 通过joystick遥感和按键控制机器人--11
  3. 【笨木头Lua专栏】基础补充08:协同程序之resume-yield间的数据返回
  4. 基于C语言STC89C52单片机电子密码锁的设计与仿真
  5. Sublime text 2/3 中 Package Control 的安装与使用方法
  6. docker mysql 报错 “Too many connections 1040“ 修改最大连接数 未生效 解决方法
  7. java struts2标签库 常用标签
  8. linux ssh scp 使用跳板机 访问 远程服务器
  9. linux netstat 查看网络信息 实例 状态说明
  10. web前端 vue、react、angular三大框架对比 与jquery的对比