我正在寻找一些关于如何构建一个非常低内存映像大小调整程序的建议,该程序将作为我在linux中的nodejs应用程序的子进程运行.
我正在寻找的解决方案是一个linux可执行文件,它将使用stdin获取base64字符串图像(从客户端上传),将照片大小调整为指定大小,然后通过stdout将生成的图像数据泵回.
我已经调查了image magick,它可能是我最终使用的,但我想我会问,看看是否有人有任何建议.
我们非常感谢您对C/C++中的库或预编译可执行文件示例的建议.另外一个有用的答案将包括低内存图像大小调整的一般策略.
谢谢
最佳答案
根据您要支持的图像格式,几乎可以通过一次只解码几行并在写入输出后丢弃数据来执行增量解码和缩放.但是,它可能需要编写您自己的代码或调整现有的解码器库来支持这种操作.
原文链接:https://www.f2er.com/linux/440413.html值得注意的是,通过简单地跳过高频系数并使用较小的IDCT,可以有效地执行缩小巨型jpeg的工作.例如,为了在半宽和半高处解码,丢弃除系数的左上象限之外的所有象限(水平和垂直频率<4)并且在它们上使用4×4IDCT而不是通常的8×8. libjpeg解码器和libavcodec解码器都支持2次幂缩放(1/2,1 / 4或1/8)的此操作.这种方法可能不需要增量解码/扩展. 你可以用djpeg -scale 1/4< src.jpg | cjpeg> dest.jpg.如果你想要一个固定的输出尺寸,你可能会首先按1/2,1/4或1/8中的任何一个进行缩放,使你最接近所需的尺寸而不会变低,然后执行插值以进入最后一步,例如djpeg -scale 1/4< src.jpg |转换pnm: - -scale 640x480 dest.jpg.