最近做图像处理时,在超大图的缩放上遇到了困难。阿里云OSS不支持20M以上图片的缩放。

用opencv在内存里缩放,30000x30000的png图片,占用3g+内存,有点无法接受。

于是自己调研相关算法。

以300x300的png为例,正常缩放时,是将其整个读进内存,生成300x300x4的矩阵,然后对矩阵进行缩放,再将缩放后的矩阵写成png。

png读取时,是一行一行读取的,写盘时,也是一行一行写的。这里用 双立方(三次)卷积插值 进行缩放,该算法用临近的16个点(4x4)进行采样。所以一边读,一边缩放,一边写,是可行的!

建立一个4行的缓冲区,每读一行,就放进缓冲区,若缓冲区中的4行可以用来缩放,就进行缩放,将缩放后的数据写进输出流,循环直到所有行读取完毕。

输入:直接复制JDK的PNGImageReader做修改,用1x1的尺寸生成Raster(不会使用这个对象中的缓冲区),修改将像素数据写入Raster的代码,让像素数据写入Resizer。

缩放Resizer:接受读图出来的像素数据,并用 双立方(三次)卷积插值 进行缩放。将缩放后的行,写入输出。

输出:直接复制JDK的PNGIMageWriter做修改,使其支持一行一行写入。

超大图片的缩放算法(撑爆内存的那种)相关推荐

  1. android 图片缩放算法,Android大图加载,缩放,滑动浏览--SubsamplingScaleImageView 源码分析大图加载...

    **************这个开源项目有点大的,也不知道几篇能写完,先根据功能点分析解读********************* 1.写在前面 图片浏览的坑不少,大图加载导致内存溢出的情况相信每个 ...

  2. 超大图片的显示:BitmapRegionDecoder 1

    不少安卓开发者都有图片加载的处理经验,比如通过压缩节省图片加载中对内存的消耗. 我们经常做的是把一张1280之类大小的图片以适应屏幕大小的尺寸展现出来,同时能够通过缩放来观察. 不过这是一般水平,通过 ...

  3. 基于libyuv库的NV12格式图片的缩放

    网上关于使用libyuv库在Linux下对NV12格式进行缩放的教程是在太少了,对于博主这种菜鸡来说简直就是煎熬,因为本人阅读源码的能力实在很差啊!!!但不管怎么样,把这几天所得写下来,希望对大家有帮 ...

  4. 几个图像缩放算法的比较

    几个图像缩放算法的比较 前段时间由于项目的需求,需要实现图像的缩放功能,期间查找了不少关于图像缩放算法的资料,现把自己的心得整理一下. 由于研究生期间没有选修过图像处理方面的课程,所以对图像缩放的原理 ...

  5. 图像缩放算法(中篇)

    图像缩放算法(中篇) ================================= 转载别人的,但是这篇文章写得确实太好了,所以想分享出来. 原文地址:http://blog.chinaunix ...

  6. 图形图像处理 —— 图像缩放算法

    转自:http://blog.chinaunix.net/space.php?uid=22915173&do=blog&id=2185545 摘要:首先给出一个基本的图像缩放算法,然后 ...

  7. 计算机视觉-图像缩放算法-cuda实现

    一.CUDA CUDA是显卡厂商NVIDIA(英伟达)推出的运算平台,能够将数据数据复制到GPU,在GPU中进行计算,然后再返回给CPU端.CUDA将GPU称为设备侧或者Device,将CPU称为Ho ...

  8. 超大图片、高清切片的图像处理

    最近有遇到超大图像处理的需求,图片都是上亿级的,这么大的图像本身就会占用很大内存,一般加载这关都过不了,即使加载成功,图像处理也会耗费很长时间.有没有一种很好的办法解决掉上述问题呢? 我想到的办法就是 ...

  9. 关于图像快速缩放算法,目前看到的最好的最清晰的一篇文章

    昨天开始写一个录制屏幕和声音存储为视频文件的程序,差不多完成了. 屏幕录制使用方法:抓屏(方法很多,BitBlt.DirectX.MirrorDriver等),缩放,X264压缩(开源的,自己封装) ...

  10. Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】...

     Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)[系列1] Android在加载或者处理超大巨 ...

最新文章

  1. JAVA实现包含main函数的栈问题(《剑指offer》)
  2. Java基础—序列化关键字transient
  3. 两种极端情况的案例:N+1次查询和笛卡尔积
  4. JS DOM事件(常用消息、常用事件、addEventListener、removeEventListener)
  5. Python爬虫从入门到精通——基本库re的使用:正则表达式
  6. .htaccess 语法以及应用
  7. 关于移动端video-player点击播放自动全屏
  8. Android MediaCodec硬解码H264文件
  9. 《亡灵序曲》各版本收集
  10. 怎么扩展服务器内存?
  11. 同方有云,加速领跑信创新时代
  12. BUUCTF 每日打卡 2021-4-14
  13. 电商网站的大数据分析统计平台
  14. 2021年中级Java面试题
  15. android推送弹窗,总被安卓通知“骚扰”?只需1招,教你屏蔽各种弹窗通知!
  16. UNIX文件操作函数open、create、close、lseek简介
  17. 如何查看某端口对应什么服务?
  18. 137813-35-5,cyclo(Arg-Gly-Asp-D-Phe-Val)分子式:C26H38N8O7
  19. PCIE_DMA实例五:基于XILINX XDMA的PCIE高速采集卡
  20. 下载S1的ROM的地方

热门文章

  1. 达梦数据库的备份还原
  2. PXE网络安装linux系统
  3. 陶博士-选股思路-如何应用月线反转
  4. 华为云 - 在华为云主机上部署宝塔6.x面板
  5. 【水题】CodeForce 1183A
  6. 自动驾驶系列(七)——聊聊人机交互中的DMS驾驶员监控系统
  7. ieeetran_IEEEtran BibTex样式
  8. Android studio添加依赖是什么意思以及添加依赖的方法
  9. 头条App项目测试实战(三)文章写评论功能用例设计
  10. android gridview 做日历,android日历控件