精华内容
下载资源
问答
  • 比普通的图片压缩算法效率高 只要70毫秒左右
  • 图片格式大致范围:位图、矢量(可无损缩放)、 HDR 高动态范围(附带光照信息的图像)、平面软件源文件这几种。存储的格式范围:有损压缩、无损压缩。应用的领域:摄影、后期合成、影视制作等。相信这篇文章是...

    060ef2aa78d2c873106858bf82a5ae6d.png

    图片文件格式

    图片照片的格式五花八门,这里就为大家一一解读每中图片格式的优缺点以及应用范围。图片格式大致范围:位图、矢量图(可无损缩放)、 HDR 高动态范围图(附带光照信息的图像)、平面软件源文件这几种。存储的格式范围:有损压缩、无损压缩。应用的领域:摄影、后期合成、影视制作等。相信这篇文章是大家非常急需的,有什么遗漏的请在回复中提示。不一定都做出来,只要做一些通用性最强的格式就好。

    be2de08a7f9d37e1606bde5b012f99af.png

    .jpeg

    JPEG(Joint Photographic Experts Group)是在国际标准化组织(ISO)领导之下制定静态图像压缩标准的委员会,第一套国际静态图像压缩标准ISO 10918-1(JPEG)就是该委员会制定的。由于JPEG优良的品质,使他在短短几年内获得了成功,被广泛应用于互联网和数码相机领域,网站上80%的图像都采用了JPEG压缩标准。


    .jpeg 格式,常用格式 - 不带透明通道的0-10级压缩图片格式(11级压缩)!压缩比越高,质量越差。网络使用的图片大多都是压缩到5级左右的图片了,一般原来编辑图书使用的话都不是很好的。当然考虑到网络传输的速度,高压缩也是非常合理的。

    e14a15009da0beb4b2ce8ab61d5acee6.png

    .png
    PNG(Portable Network Graphics)便携式网络图形。是一种无损压缩的位图片形格式。其设计目的是试图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。PNG的名称来源于“可移植网络图形格式(Portable Network Graphic Format,PNG)”,也有一个非官方解释“PNG's Not GIF”。PNG使用从LZ77派生的无损数据压缩算法,一般应用于JAVA程序、网页或S60程序中,原因是它压缩比高,生成文件体积小。


    .png 格式,常用格式 - 带透明通道的无损图片格式!PNG文件采用LZ77算法的派生算法进行压缩,其结果是获得高的压缩比,不损失数据。它利用特殊的编码方法标记重复出现的数据,因而对图像的颜色没有影响,也不可能产生颜色的损失,这样就可以重复保存而不降低图像质量。

    d396b00ebc202b26a21f3b176768b712.png

    .gif
    GIF(Graphics Interchange Format)的原义是“图像互换格式”,是CompuServe公司在 1987 年开发的图像文件格式。GIF文件的数据,是一种基于LZW算法的连续色调的无损压缩格式。其压缩率一般在50%左右,它不属于任何应用程序。GIF格式可以存多幅彩色图像,如果把存于一个文件中的多幅图像数据逐幅读出并显示到屏幕上,就可构成一种最简单的动画。大家过看到网站中的动态图片与表情包就是这个格式啦!


    .gif 格式,常用网页格式 - 带透明通道的(静态、动态)图片格式!GIF格式自1987年由CompuServe公司引入后,因其体积小、成像相对清晰,特别适合于初期慢速的互联网,而大受欢迎。分为静态GIF和动画GIF两种,支持透明背景图像,适用于多种操作系统,“体型”很小,网上很多小动画都是GIF格式。其实GIF是将多幅图像保存为一个图像文件,从而形成动画,最常见的就是通过一帧帧的动画串联起来的搞笑gif图,所以归根到底GIF仍然是图片文件格式。

    259874cbf653b7d762f501cc5dc78435.png

    .tif
    TIFF(Tagged Image File Format)是一种非失真的压缩格式(最高也只能做到2~3倍的压缩比)能保持原有图像的颜色及层次,但占用空间却很大。例如一个200万像素的图像,差不多要占用6MB的存储容量,故TIFF常被应用于较专业的用途,如书籍出版、海报等,极少应用于互联网上。TIFF是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像。通过在文件头中包含“标签”它能够在一个文件中处理多幅图像和数据。标签能够标明图像的如图像大小这样的基本几何尺寸或者定义图像数据是如何排列的并且是否使用了各种各样的图像压缩选项。


    .tif 格式,常用图书印刷格式 - 可跨软件进行原图层编辑的图片格式!TIFF格式在业界得到了广泛的支持,如Adobe公司的Photoshop、Sefif 的Affinity Photo、Affinity Designer、Jasc的GIMP、Ulead PhotoImpact和Paint Shop Pro等图像处理应用、QuarkXPress和Adobe InDesign这样的桌面印刷和页面排版应用,扫描、传真、文字处理、光学字符识别和其它一些应用等都支持这种格式。

    94c0e9041647a68bbcbbc766f163462d.png

    .tga
    TGA格式(Tagged Graphics)是由美国Truevision公司为其显示卡开发的一种图像文件格式,已被国际上的图形、图像工业所接受。TGA(Targa)格式是计算机上应用最广泛的图象格式。在兼顾了BMP的图象质量的同时又兼顾了JPEG的体积优势。并且还有自身的特点:通道效果、方向性。在CG领域常作为影视动画的序列输出格式,因为兼具体积小和效果清晰的特点。


    .tga 格式,常用图像格式 - 带透明通道的视频合成图像序列!TGA格式支持压缩,使用不失真的压缩算法。TGA图像格式最大的特点是可以做出不规则形状的图形、图像文件,一般图形、图像文件都为正方形,若需要有圆形、棱形甚至是镂空的图像文件时,TGA就可以派上用场了。

    0da47bb663fe705126e7ca1fa279373c.png

    .bmp
    BMP(Bitmap)是微软Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。


    .bmp 格式,微软格式 - 逐渐被淘汰的格式!BMP文件通常是不压缩的,所以它们通常比同一幅图像的压缩图像文件格式要大很多。此格式一般碰到微软开发的软件,基本上都是以此格式为主了。在碰到这种格式的时候,大家只要另存为其他的更好编辑的格式就好了。

    ee794856a1e9219eb5c942ddfaec9a6f.png

    .dds
    DDS(DirectDraw Surface)是DirectX纹理压缩(DirectX Texture Compression,简称DXTC)的产物。由NVIDIA公司开发。大部分3D游戏引擎都可以使用DDS格式的图片用作贴图,也可以制作法线贴图。通常情况下想要编辑此格式需要安装 dds 插件才行。


    .dds 格式,游戏常用贴图格式!许多3D软件包括大部分游戏都用dds格式,又称“贴图”,许多fans通过修改dds文件可以生成特殊显示效果。但目前越来越多的游戏引擎支持更加通用的图片格式。比如:jpeg、png 等,这种格式使用的越来越少,但是一些老游戏还是 dds 贴图。

    1a2476de250fcc4ca01b8039cc998f14.png

    .svg
    SVG(Scalable Vector Graphics)可缩放矢量图形是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。SVG是W3C("World Wide Web ConSortium" 即 " 国际互联网标准组织")在2000年8月制定的一种新的二维矢量图形格式,也是规范中的网络矢量图形标准。SVG严格遵从XML语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率无关的矢量图形格式。


    .svg 格式,矢量图像 - 应用前景广阔的格式 - 网络 - 三维 - 插画等!【众多三维软件可以导入支持】矢量图像用点和线来描述物体,所以文件会比较小,同时也能提供高清晰的画面,适合于直接打印或输出。而位图图像的存储单位是图像上每一点的像素值,因此一般的图像文件都很大,会占用大量的网络带宽。SVG是一种矢量图形格式,GIF、JPEG是光栅文件格式。有了两者的概念后,SVG较GIF、JPEG的优势显而易见。

    33724e034badd6b5fc5fa7d63c9fa928.png

    .eps
    EPS(Encapsulated Post Script)是是目前桌面印刷系统普遍使用的通用交换格式当中的一种综合格式。它是由一个PostScript语言的文本文件和一个(可选)低分辨率的由PICT或TIFF格式描述的代表像组成。 EPS文件就是包括文件头信息的PostScript 文件,利用文件头信息可使其他应用程序将此文件嵌入文档。是我们处理图像工作中的最重要的格式,它在Mac和PC环境下的图形和版面设计中广泛使用。


    .eps 格式,矢量图像 - 印刷交互互通格式!EPS文件虽然采用矢量描述的方法,但亦可容纳点阵图像(像素图像:png、jpeg等),只是它并非将点阵图像转换为矢量描述,而是将所有像素数据整体以象素文件的描述方式保存。EPS文件可以同时携带与文字有关的字库的全部信息。EPS格式在保存过程中图像体积过大,因此,如果仅仅是保存图像,建议你不要使用EPS格式。如果考虑输出到其他软件中进行编辑或者打印,可以选择这种格式。

    31d6d7e28f20e6f772c12a9554e7c261.png

    .pdf
    PDF(Portable Document Format)便携式文档格式,是由Adobe Systems用于与应用程序、操作系统、硬件无关的方式进行文件交换所发展出的文件格式。PDF文件以PostScript语言图象模型为基础,无论在哪种打印机上都可保证精确的颜色和准确的打印效果,即PDF会忠实地再现原稿的每一个字符、颜色以及图象。PDF文件使用了工业标准的压缩算法,通常比PostScript文件小,易于传输与储存。它还是页独立的,一个PDF文件包含一个或多个“页”,可以单独处理各页,特别适合多处理器系统的工作。此外,一个PDF文件还包含文件中所使用的PDF格式版本,以及文件中一些重要结构的定位信息。正是由于 PDF文件的种种优点,它逐渐成为出版业中的新宠。


    .pdf 格式,印刷格式 - 可封装位图与适量的课再次编辑的格式,目前印刷厂几乎都在支持 Pdf 格式,也就是说大家在印刷提交的时候选择导出印刷质量的 pdf 即可!Adobe公司设计PDF文件格式的目的是为了支持跨平台上的,多媒体集成的信息出版和发布,尤其是提供对网络信息发布的支持。为了达到此目的, PDF具有许多其他电子文档格式无法相比的优点。PDF文件格式可以将文字、字型、格式、颜色及独立于设备和分辨率的图形图像等封装在一个文件中。该格式文件还可以包含超文本链接、声音和动态影像等电子信息,支持特长文件,集成度和安全可靠性都较高。

    2ed7b38bb9312de535aaea4108aa150d.png

    .hdr
    HDR(High-Dynamic Range),相比普通的图像,可以提供更多的动态范围和图像细节,根据不同的曝光时间的LDR(Low-Dynamic Range)图像,利用每个曝光时间相对应最佳细节的LDR图像来合成最终HDR图像,能够更好的反映出真实环境中的视觉效果。现实真正存在的亮度差,即最亮的物体亮度,和最暗的物体亮度之比为10的8次方, 而人类的眼睛所能看到的范围是10的5次方左右,但是一般的显示器,照相机能表示的只有256种不同的亮度。通俗点来讲就是计算机现实器摄影机目前无法达到我们肉眼所能感知的色彩范围,所以 hdr 的图片格式就会附带光照强度信息,它比其它格式的图像有着更大亮度的数据贮存,而且它记录亮度的方式与传统的图片不同,不是用非线性的方式将亮度信息压缩到8bit或16bit的颜色空间内,而是用直接对应的方式记录亮度信息,它可以说记录了图片环境中的照明信息,因此我们可以使用这种图象来“照亮”场景。有很多HDRI文件是以全景图的形式提供的,我们也可以用它做环境背景来产生反射与折射。这里强调一下HDRI与全景图有本质的区别,全景图指的是包含了360度范围场景的普通图象,可以是JPG格式,BMP格式,TGA格式等等,属于Low-Dynamic RangeRadiance Image,它并不带有光照信息。


    .hdr 格式,CG 应用格式 - 可附带光照信息的高动态范围图片 - 三维软件中可提供真实的照明 - 摄影中可附带RAW 的图像就算是 hdr 的一种!HDRI文件是一种文件,扩展名是hdr或tif格式,有足够的能力保存光照信息,但不一定是全景图。Dynamic Range(动态范围)是指一个场景的最亮和最暗部分之间的相对比值。一张HDR图片,它记录了远远超出256个级别的实际场景的亮度值,超出的部分在屏幕上是显示不出来的。通常使用在影视制作,提供环境照明的一种与合成的一种有效手段。

    3fa888cff1cf80a055e497d6f76a104f.png

    .raw
    RAW(RAW Image Format)是“未经加工”的图像。可以理解为:RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据。RAW文件是一种记录了数码相机传感器的原始信息,同时记录了由相机拍摄所产生的一些元数据(Metadata,如ISO的设置、快门速度、光圈值、白平衡等)的文件。RAW是未经处理、也未经压缩的格式,可以把RAW概念化为“原始图像编码数据”或更形象的称为“数字底片”。通常带有 HDR 高动态范围的光照信息,这在后期编辑图片的时候可以更好的控制曝光、白平衡、色彩饱和度等等。


    .raw 格式,摄影机拍摄原始记录格式 - 可附带光照信息的高动态范围图片 - 常运用照片摄影后期编辑!不同的摄影机厂商的 RAW 格式后缀有所不同。佳能:CRWCR2;柯达:KDC;尼康:NEF;索尼:ARW;松下:RW2...总之,照片拍摄时选择 RAW存储,后期编辑与合成才能更好的控制,但是存储的文件很大,常常几十兆一张图片。

    24c2aeee417bb2147596c3b63b14bb9b.png

    .exr
    EXR是由工业光魔(Industrial Light & Magic)开发的一种HDR标准。OpenEXR文件的扩展名为.exr,常见的OpenEXR文件是FP16(16bit Float Point,也被称为half Float Point)数据图像文件,每个通道的数据类型是FP16,一共四个通道64bpp,每个通道1个bit位用来标志“指数”,5个bit用来存放指数的值,10个bit存放色度坐标(u,v)的尾数,其动态范围从6.14 × 10 ^ -5到6.41 × 10 ^ 4。在OpenEXR的算法里面共使用16bit来表示光照数据。虽然看起来和使用16bit亮度通道运算位数相同,但是OpenEXR巧妙的采用了1个bit位用来标志“指数”,5个bit用来存放指数的值,10个bit存放色度坐标的尾数。这样就轻易的解决了浮点数值由于位数少而精度不高的问题。大大的拓宽的在FP16下的动态范围。


    .exr 格式,HDR格式 - 可附带光照信息的高动态范围图片 - 常运用与影视后期合成!ILM目前生产的所有电影。OpenEXR应用的第一个电影是《哈利波特与魔法石》,随后在《男性在黑色Ⅱ》《纽约黑帮》和《体征》中得到大面积的应用。此后,的OpenEXR已成为ILM的主要图像文件格式。 EXR 允许三维渲染渲染输出EXR 文件,为后期合成带来了质的变化。OpenEXR 可将三维软件渲染设置的“分层渲染”封装在一个独立的文件中,后期合成师在管理素材编辑时将会得心应手。

    24adfb151751e0cd846c0929e8400346.png

    .psd
    PSD(Photoshop Document)是著名的Adobe公司的图像处理软件Photoshop的专用格式。这种格式可以存储Photoshop中所有的图层,通道、参考线、注解和颜色模式等信息。在保存图像时,若图像中包含有层,则一般都用Photoshop(PSD)格式保存。


    .psd 格式, 源文件格式 - 可封装所有软件编辑信息!PSD文件其实就是Photoshop的源文件,目前其他软件也可以逐渐的支持原生的 PSD,但是一些特效等会合并成一个独立的像素层。Affinity Photo即可支持原生80%的 PSD 文件,同时也支持导出 PSD 文件。

    ef27987ac2597ec5b31b990dcc6a83aa.png

    .afphoto | .afdesign
    Affinity 系列软件的格式 | .afphoto是 Affinity Photo 的源文件,.afdesign是 Affinity Designer 的源文件。这两个软件的格式是互通的,支持原始的特效编辑以及矢量图形的编辑,简单点来说这两个文件直接可以使用其中一个软件打开,支持所有可编辑的属性。这是非常好的一种方式,为我们的工作带来了极大的便利。

    转载:饼干教育

    展开全文
  • 图片 压缩

    2014-11-05 14:00:53
    首先,要压缩的图片格式不能说动态图片,你可以使用bmp、png、gif等,至于压缩质量,可以通过BufferedImage来指定。 在C盘的temp下放置一张图片pic123.jpg,尽量找一个像素高一点的图片,这里我

    原文http://cuisuqiang.iteye.com/blog/2045855

    整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享。
    首先,要压缩的图片格式不能说动态图片,你可以使用bmp、png、gif等,至于压缩质量,可以通过BufferedImage来指定。
    在C盘的temp下放置一张图片pic123.jpg,尽量找一个像素高一点的图片,这里我找了一张5616*3744的。

     Java代码  收藏代码

    1. package test;  
    2. import java.io.*;  
    3. import java.util.Date;  
    4. import java.awt.*;  
    5. import java.awt.image.*;  
    6. import javax.imageio.ImageIO;  
    7. import com.sun.image.codec.jpeg.*;  
    8. /** 
    9.  * 图片压缩处理 
    10.  * @author 崔素强 
    11.  */  
    12. public class ImgCompress {  
    13.     private Image img;  
    14.     private int width;  
    15.     private int height;  
    16.     @SuppressWarnings("deprecation")  
    17.     public static void main(String[] args) throws Exception {  
    18.         System.out.println("开始:" + new Date().toLocaleString());  
    19.         ImgCompress imgCom = new ImgCompress("C:\\temp\\pic123.jpg");  
    20.         imgCom.resizeFix(400400);  
    21.         System.out.println("结束:" + new Date().toLocaleString());  
    22.     }  
    23.     /** 
    24.      * 构造函数 
    25.      */  
    26.     public ImgCompress(String fileName) throws IOException {  
    27.         File file = new File(fileName);// 读入文件  
    28.         img = ImageIO.read(file);      // 构造Image对象  
    29.         width = img.getWidth(null);    // 得到源图宽  
    30.         height = img.getHeight(null);  // 得到源图长  
    31.     }  
    32.     /** 
    33.      * 按照宽度还是高度进行压缩 
    34.      * @param w int 最大宽度 
    35.      * @param h int 最大高度 
    36.      */  
    37.     public void resizeFix(int w, int h) throws IOException {  
    38.         if (width / height > w / h) {  
    39.             resizeByWidth(w);  
    40.         } else {  
    41.             resizeByHeight(h);  
    42.         }  
    43.     }  
    44.     /** 
    45.      * 以宽度为基准,等比例放缩图片 
    46.      * @param w int 新宽度 
    47.      */  
    48.     public void resizeByWidth(int w) throws IOException {  
    49.         int h = (int) (height * w / width);  
    50.         resize(w, h);  
    51.     }  
    52.     /** 
    53.      * 以高度为基准,等比例缩放图片 
    54.      * @param h int 新高度 
    55.      */  
    56.     public void resizeByHeight(int h) throws IOException {  
    57.         int w = (int) (width * h / height);  
    58.         resize(w, h);  
    59.     }  
    60.     /** 
    61.      * 强制压缩/放大图片到固定的大小 
    62.      * @param w int 新宽度 
    63.      * @param h int 新高度 
    64.      */  
    65.     public void resize(int w, int h) throws IOException {  
    66.         // SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢  
    67.         BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );   
    68.         image.getGraphics().drawImage(img, 00, w, h, null); // 绘制缩小后的图  
    69.         File destFile = new File("C:\\temp\\456.jpg");  
    70.         FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流  
    71.         // 可以正常实现bmp、png、gif转jpg  
    72.         JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
    73.         encoder.encode(image); // JPEG编码  
    74.         out.close();  
    75.     }  
    76. }  

     

    运行后在C盘temp下生成一个465.jpg,像素大小为600*400,像素大小是我指定的。用时也就是一两秒的事情,注意,我这张图片是10M的,压缩后是40.5KB
    一些细节事项可以参考代码中的注释。

     

    要注意的是,你可能想试一试较大图片的处理能力,如果你的JDK没有指定默认内存,那可能会有如下异常,因为内存不够大:

    Java代码  收藏代码
    1. 开始:2014-4-14 16:25:11  
    2. Exception in thread "main" java.lang.OutOfMemoryError: Java heap space  
    3.     at java.awt.image.DataBufferByte.<init>(DataBufferByte.java:58)  
    4.     at java.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:397)  
    5.     at java.awt.image.Raster.createWritableRaster(Raster.java:938)  
    6.     at javax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1169)  
    7.     at javax.imageio.ImageReader.getDestination(ImageReader.java:2879)  
    8.     at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:943)  
    9.     at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:915)  
    10.     at javax.imageio.ImageIO.read(ImageIO.java:1422)  
    11.     at javax.imageio.ImageIO.read(ImageIO.java:1282)  
    12.     at test.ImgCompress.<init>(ImgCompress.java:31)  
    13.     at test.ImgCompress.main(ImgCompress.java:21)  

     

    解决方法:
    在Eclipse里选:Window->Preference->Installed JREs->Edit(选中jre),
    在Default VM Arguments里输入-Xms256m -Xmx1024m,表示最小堆内存256M,最大堆1G,然后运行就可以了


    展开全文
  • R语言和Python学堂知乎:https://www.zhihu.com/people/zoro-3-92/posts简书:https://www.jianshu.com/u/981ba7d6b4a6熟悉R的朋友,肯定知道animation包,它可将一系列用R绘制的静态转化为各种格式的动图或视频...

    f3e7552803c397c032e5f05f058b0ef9.png

    作者:辉小宝同学

    微信公众号:R语言和Python学堂

    知乎:

    https://www.zhihu.com/people/zoro-3-92/posts

    简书:https://www.jianshu.com/u/981ba7d6b4a6

    熟悉R的朋友,肯定知道 animation包,它可将一系列用R绘制的静态图转化为各种格式的动图或视频(比如:gif, mp4, avi等格式)。事实上,它是通过R去调用一些图片或视频处理程序(比如:ImageMagick, GraphicsMagick, FFmpeg等)来实现这些功能的,因此如果要使用这些功能,相应外部程序也必须要安装。关于 animation包的详情可参考https://cran.r-project.org/web/packages/animation/。

    由于 animation包只能将R绘制的静态图转化为动图,它不能处理外部图片以及gif动态图。因此我将在这篇博客教大家如何用R从gif中提取图片以及如何将外部图片制作成gif动态图,我将以下面的gif动图为例:

    a411f148cf5c90495ca4bdc018310319.gif

    1. 下载ImageMagick

    ImageMagick是一款功能强大、稳定而且免费开源的图片处理工具集,可以用来读、写和处理超过200种不同格式的图片文件,详情可参考其官网https://www.imagemagick.org。

    这里我们也将通过R来调用ImageMagick来实现我们的功能。我们用的是ImageMagick的Windows portable版(便携版,也即免安装版),我将安装压缩包已上传至百度网盘(包括32位和64位系统的,解压就可以用,无需安装),你也可从官网下载https://www.imagemagick.org/script/download.php。

    62501a7b9ea0b160e2f058530d8e652e.png

    2. 从gif动图中提取每帧图片

    在ImageMagick中可通过命令行模式来实现这个功能,其一般命令为convert test.gif-coalesce result_%05d.png。下面通过R来调用这个命令,我将其封装成一个叫 gif2frames()的函数,其各参数的意义见函数内部的注释:

    gif2frames function(pathIn='',

                          pathOut='',

                          ImageMagick_path='',

                          frameFormat='png',

                          prefixFrame='/frame_%05d.'){

     ##### arguments

     # pathIn: gif文件所在路径

     # pathOut: 图片保存路径

     # ImageMagick_path: ImageMagick convert命令所在路径

     # frameFormat: 图片保存的格式类型

     # prefixFrame: 图片文件名的格式

     ##### return

     # None

     if(!dir.exists(pathOut))  ##自动创建保存图片的文件夹

       dir.create(pathOut)

     command ImageMagick_path, pathIn, '-coalesce', paste0(pathOut, prefixFrame, frameFormat))

     #system('F:R_tutorials/gif/ImageMagick-7.0.8-64bit/convert test.gif -coalesce ./frames/frame_%05d.png')

     system(command)  ##调用外部的ImageMagick程序

    }

    从上面代码可知,最后我们通过R中的 system()函数来调用外部ImageMagick程序来实现所需功能。

    来测试一下:

    pathIn 'test.gif'

    pathOut './frames/'

    ImageMagick_path './ImageMagick-7.0.8-64bit/convert'

    gif2frames(pathIn, pathOut, ImageMagick_path)

    运行完上面代码后, test.gif动图中的每一帧都保存在 frames文件夹下,如下图:

    57f7fd99dd7338fb5db41a3f7de96c55.png

    用R提取gif中的每帧图片就算实现了,是不是很简单!!!

    3. 制作gif

    下面我将使用上一步提取到的图片(即 frames文件夹下的170帧图片)为例,来介绍如何制作gif,这可以看作为上一步的逆过程。我也将其封装成一个叫 frames2gif的函数:

    frames2gif function(pathIn='',

                          pathOut='',

                          ImageMagick_path='',

                          resize_ratio=1,

                          delay=40,

                          frameFormat='png',

                          everyFrame=1){

     ##### arguments

     # pathIn: 图片所在路径

     # pathOut: 生成的gif所保存的路径

     # ImageMagick_path: ImageMagick convert命令所在路径

     # resize_ratio: 调节gif的尺寸,默认为1。如果为0.5,gif的长度和宽度将是图片尺寸的一半

     # delay: 设置帧与帧之间的时间间隔,默认为40(表示0.4s)。如果为200,那么时间间隔即为2s

     # frameFormat: 图片的格式

     # everyFrame: 如果为3,只使用pathIn文件夹下的第1, 4, 7,10,13帧,.....图片来制作gif,默认使用所有图片

     ##### return

     # None

     ## create temp dir to store frames used to create gif.

     tempdir '/temp')

     dir.create(tempdir)

     files '*.', frameFormat), recursive=FALSE, full.names=TRUE)

     index 1, length(files), by=everyFrame)

     file.copy(files[index], tempdir)

     command ImageMagick_path,

                      '-resize', paste0(as.integer(100L*resize_ratio), '%'),

                      '-delay', delay,

                      paste0(tempdir,'/*.', frameFormat),

                      pathOut)

     #system('F:R_tutorials/gif/ImageMagick-7.0.8-64bit/convert -resize 90% -delay 40 *.png result.gif')

     system(command)

     ## delete temp dir

     unlink(tempdir, recursive=TRUE, force=TRUE)

    }

    来测试一下:

    1. 设置 delay参数为 2(也即帧与帧之间的时间间隔为0.02s),使动画变得更快。

    pathIn './frames/'

    pathOut 'fast.gif'

    ImageMagick_path './ImageMagick-7.0.8-64bit/convert'

    frames2gif(pathIn, pathOut,

              ImageMagick_path,

              delay=2)

    结果如下图:

    cae22b43aa03a6df34e8f214342ed73a.gif

    2. 设置 resize_ratio参数为 0.5,使动画尺寸大小变为原来的一半。

    pathOut 'small.gif'

    frames2gif(pathIn, pathOut,

              ImageMagick_path,

              resize_ratio=0.5,

              delay=4)

    结果如下图:

    7d6cacb7bcc51ad2a0dbc99470b85819.gif

    3. 设置 everyFrame参数为 2,使动画的总帧数变为原来的1/2。

    pathOut 'small_frames.gif'

    frames2gif(pathIn, pathOut,

              ImageMagick_path,

              everyFrame=2,

              delay=4)

    结果如下图:

    be35b1a56c7a1c6384526d9e381d9223.gif

    从上图可知,减少动画总帧数,其效果相当于缩短动画时间。

    通过以上三个例子,我们知道如何使用 frames2gif()函数来制作gif动图了。

    以上就是本文的全部内容,希望对大家的学习有所帮助。如果觉得文章不错,动手转发支持一下哦!

    e1fee69636a7889f32fa57f37b8ad921.gif

    5c3a0e0c9b98da232eb02fe1c99219ba.png

    公众号后台回复关键字即可学习

    回复 爬虫             爬虫三大案例实战  回复 Python        1小时破冰入门

    回复 数据挖掘      R语言入门及数据挖掘回复 人工智能      三个月入门人工智能回复 数据分析师   数据分析师成长之路 回复 机器学习      机器学习的商业应用回复 数据科学      数据科学实战回复 常用算法      常用数据挖掘算法

    eb456fb1a03cc40769fb03ae9deb9b5b.gif3a159b27fa21650628392b0b98af7015.png爱我请给我好看!eb456fb1a03cc40769fb03ae9deb9b5b.gif
    展开全文
  • 对图片进行压缩

    2018-01-11 17:44:57
    Java中图片压缩处理 ... JDK java压缩压缩图片内存溢出图片处理像素  ...整理文档,搜刮出一个Java做图片...首先,要压缩的图片格式不能说动态图片,你可以使用bmp、png、gif等,至于压缩质量,可以通过BufferedIma

    Java中图片压缩处理

    博客分类:转载地址:http://cuisuqiang.iteye.com/blog/2045855 JDK

    整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享。
    首先,要压缩的图片格式不能说动态图片,你可以使用bmp、png、gif等,至于压缩质量,可以通过BufferedImage来指定。
    在C盘的temp下放置一张图片pic123.jpg,尽量找一个像素高一点的图片,这里我找了一张5616*3744的。

     

    Java代码  收藏代码
    1. package test;  
    2. import java.io.*;  
    3. import java.util.Date;  
    4. import java.awt.*;  
    5. import java.awt.image.*;  
    6. import javax.imageio.ImageIO;  
    7. import com.sun.image.codec.jpeg.*;  
    8. /** 
    9.  * 图片压缩处理 
    10.  * @author 崔素强 
    11.  */  
    12. public class ImgCompress {  
    13.     private Image img;  
    14.     private int width;  
    15.     private int height;  
    16.     @SuppressWarnings("deprecation")  
    17.     public static void main(String[] args) throws Exception {  
    18.         System.out.println("开始:" + new Date().toLocaleString());  
    19.         ImgCompress imgCom = new ImgCompress("C:\\temp\\pic123.jpg");  
    20.         imgCom.resizeFix(400400);  
    21.         System.out.println("结束:" + new Date().toLocaleString());  
    22.     }  
    23.     /** 
    24.      * 构造函数 
    25.      */  
    26.     public ImgCompress(String fileName) throws IOException {  
    27.         File file = new File(fileName);// 读入文件  
    28.         img = ImageIO.read(file);      // 构造Image对象  
    29.         width = img.getWidth(null);    // 得到源图宽  
    30.         height = img.getHeight(null);  // 得到源图长  
    31.     }  
    32.     /** 
    33.      * 按照宽度还是高度进行压缩 
    34.      * @param w int 最大宽度 
    35.      * @param h int 最大高度 
    36.      */  
    37.     public void resizeFix(int w, int h) throws IOException {  
    38.         if (width / height > w / h) {  
    39.             resizeByWidth(w);  
    40.         } else {  
    41.             resizeByHeight(h);  
    42.         }  
    43.     }  
    44.     /** 
    45.      * 以宽度为基准,等比例放缩图片 
    46.      * @param w int 新宽度 
    47.      */  
    48.     public void resizeByWidth(int w) throws IOException {  
    49.         int h = (int) (height * w / width);  
    50.         resize(w, h);  
    51.     }  
    52.     /** 
    53.      * 以高度为基准,等比例缩放图片 
    54.      * @param h int 新高度 
    55.      */  
    56.     public void resizeByHeight(int h) throws IOException {  
    57.         int w = (int) (width * h / height);  
    58.         resize(w, h);  
    59.     }  
    60.     /** 
    61.      * 强制压缩/放大图片到固定的大小 
    62.      * @param w int 新宽度 
    63.      * @param h int 新高度 
    64.      */  
    65.     public void resize(int w, int h) throws IOException {  
    66.         // SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢  
    67.         BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );   
    68.         image.getGraphics().drawImage(img, 00, w, h, null); // 绘制缩小后的图  
    69.         File destFile = new File("C:\\temp\\456.jpg");  
    70.         FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流  
    71.         // 可以正常实现bmp、png、gif转jpg  
    72.         JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
    73.         encoder.encode(image); // JPEG编码  
    74.         out.close();  
    75.     }  
    76. }  

     

    运行后在C盘temp下生成一个465.jpg,像素大小为600*400,像素大小是我指定的。用时也就是一两秒的事情,注意,我这张图片是10M的,压缩后是40.5KB
    一些细节事项可以参考代码中的注释。

     

    要注意的是,你可能想试一试较大图片的处理能力,如果你的JDK没有指定默认内存,那可能会有如下异常,因为内存不够大:

    Java代码  收藏代码
    1. 开始:2014-4-14 16:25:11  
    2. Exception in thread "main" java.lang.OutOfMemoryError: Java heap space  
    3.     at java.awt.image.DataBufferByte.<init>(DataBufferByte.java:58)  
    4.     at java.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:397)  
    5.     at java.awt.image.Raster.createWritableRaster(Raster.java:938)  
    6.     at javax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1169)  
    7.     at javax.imageio.ImageReader.getDestination(ImageReader.java:2879)  
    8.     at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:943)  
    9.     at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:915)  
    10.     at javax.imageio.ImageIO.read(ImageIO.java:1422)  
    11.     at javax.imageio.ImageIO.read(ImageIO.java:1282)  
    12.     at test.ImgCompress.<init>(ImgCompress.java:31)  
    13.     at test.ImgCompress.main(ImgCompress.java:21)  

     

    解决方法:
    在Eclipse里选:Window->Preference->Installed JREs->Edit(选中jre),
    在Default VM Arguments里输入-Xms256m -Xmx1024m,表示最小内存256M,最大1G,然后运行就可以了

     

    请您到ITEYE网站看 java小强 原创,谢谢!
    http://cuisuqiang.iteye.com/

    自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!

    展开全文
  • HDR高动态压缩【MATLAB代码】

    千次阅读 热门讨论 2018-08-05 14:02:13
    本文给出的是高动态范围图像压缩的程序,即HDR转换为LDR,其中程序中用到的hdr格式的高动态范围图像下载地址为http://download.csdn.net/detail/majinlei121/9380904 下面为高动态范围压缩程序: clear all; ...
  • GIF(Graphics Interchange Format,图形交换格式)是一种位图图像格式,GIF格式的图像文件具有如下特点:(1)GIF格式图像文件的扩展名是“.gif”。(2)对于灰度图像表现最佳。(3)具有GIF87a和GIF89a两个版本。(4)采用...
  • 压缩图片/宽高,动态控制单元格高度与宽度 1.word 需要模板 手动创建word excel .向word中插入excel附件并另存为 word xml 格式 替换符替换 文字 和附件base64内容 有两个binaryData标签 一个是base64,另一个是...
  • 为什么要使用纹理压缩

    千次阅读 2013-09-27 11:21:28
    说到图像压缩,大家肯定会想到JPG、GIF等静态图像压缩格式和MPEG动态图像压缩格式,但实用的纹理压缩算法必须符合几个条件:一要能高速、实时解压缩,不影响纹理贴图过程的速度,所以JPEG(静态图像专家组)、...
  • 文章目录背景png格式简介图片压缩实操使用OpenViewerFX使用pngquant(JNI调用)在linux下构建在win下构建JNI调用关于pngquant的jni动态链接库文件下载 背景 需求是大大的减小彩信图片的体积,可以发送更多数量的彩信...
  • 有一个参数为输出位图文件名(*.bmp),它能将内存中的位图文件信息,按照位图格式,写到位文件中保存。(输出位图文件名由压缩文件名(*.zj)) (3)灰度图像压缩功能,提供comp方法。 comp方法有一个参数为输出...
  • GIF动画图片静态GIF和动画GIF两种,扩展名为.gif,是一种压缩位图格式,GIF动态图(27张)支持透明背景图像,适用于多种操作系统,“体型”很小,网上很多小动画都是GIF格式。此教程是本人精心收藏。
  • 动态哈夫曼编码(Compression with dynamic Huffman codes),这部分内容只介绍动态哈夫曼编码的格式,...中每一个“*”代表一比特,蓝色部分为经过压缩之后的数据,其他部分,除了首部块,都用于构建动态哈夫曼树。
  • 5.HTML图片的格式

    千次阅读 2018-10-10 09:26:19
    图片的格式    JPEG(JPG)  - JPEG支持的颜色比较多,图片可以压缩,但是他不支持透明  - 一般使用JPEG来保存照片等颜色丰富的图片 ... - GIF支持的颜色少,只支持简单的透明,支持动态图  PNG  - PNG支...
  • 如下所示: 输入格式 输入包含多组测试用例。 每组测试用例占一行,包含两个整数N和M。 当输入用例N=0,M=0时,表示输入终止,且该用例无需处理。 输出格式 每个测试用例输出一个结果,每个结果占一行。 数据范围...
  • 动态图片、图表

    2016-04-17 18:02:00
    它可以用于自动为图片生成缩略,将多张图片压缩到单独的框架中,或者是做基于 Web 的图片处理 Python 有许多出色并且强大的图表库用以绘制图表,按需地图,表格等。 我们不可能将它们全部列出,所以下面列出...
  • 动态范围图象对真实场景的色阶和动态范围进行编码,如辐射度。通过对JPEG2000编码器进行扩展,提出了一个高动态范围静态图象的压缩方法。该方法基于应用于高动态范围图象显示的色调映射技术,通过可变基底的对数...
  • 图片一般分为两种,一种是静态图片,常用的图片格式有jpg,png等。... 另一种常见的图片格式是GIF动图格式,对于这种类型的图片我们就需要使用专门的工具来进行操作,常见的操作有GIF压缩,图片合成...
  • 关于 这是Arm:registered:自适应可伸缩纹理压缩(ASTC)编码器astcenc的官方存储库, astcenc是使用ASTC纹理...编码器支持将低动态范围(BMP,JPEG,PNG,TGA)和高动态范围(EXR,HDR)图像以及以DDS和KTX容器格式
  • GIF(Graphics Interchange Format,图形交换格式)是一种位图图像格式,GIF格式的图像文件具有如下特点:(1)GIF格式图像文件的扩展名是“.gif”。(2)对于灰度图像表现最佳。(3)具有GIF87a和GIF89a两个版本。...
  • 本文来自腾讯前端开发工程师“ wendygogogo”...GIF ( Graphics Interchange Format )原义是“图像互换格式”,是 CompuServe 公司在1987年开发出的图像文件格式,可以说是互联网界的老古董了。 GIF 格式可以存储多...
  • 图片一般分为两种,一种...另一种常见的图片格式是GIF动图格式,对于这种类型的图片我们就需要使用专门的工具来进行操作,常见的操作有GIF压缩,图片合成GIF,GIF裁剪,视频转GIF等。以前一般都会使用格式工厂来进行操
  • GIF支持的颜色少,只支持简单的透明,支持动态图 图片颜色单一或者时动态图时可以使用gif PNG PNG支持的颜色多,并且支持复杂的透明 可以用来显示颜色复杂的透明的图片 WebP WebP格式图像的体积要比JPEG格式图像小40...
  • 计算机中使用的图像文件格式大体上可分为图像文件格式动态图像文件格式两大类,每类又有很多种。 JPEG是由ISO和IEC两个组织机构联合组成的一个专家组,负责制定静态和数字图像数据压缩编码标准,这个专家组地区性...
  • 相信大家都见过那种带有滚动文字效果的...1、打开压缩图网站,点击上传图片。 2、将我们提前制作好的文字内容相同位置不同的图片依次上传,调整一下播放的速度,可以根据你的需要调整图片的尺寸宽度、高度的参数。 3
  • 浓缩的才是精华:浅析GIF格式图片的存储和压缩 GIF格式的历史 GIF(Graphics Interchange Format)原义是“图像互换格式”,是CompuServe公司在1987年开发出的图像文件格式,可以说是互联网界的老古董了。 GIF...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,000
精华内容 400
关键字:

动态图压缩格式