精华内容
下载资源
问答
  • gif压缩

    2012-09-04 10:58:46
    gif压缩
  • GIF压缩

    2020-06-11 11:54:49
    GIF压缩 gif压缩功能,网上找了很多方法不太行,最后参考了这些博客解决了压缩问题,主要自己记录下。 参考如下: http://www.blogjava.net/wangxinsh55/archive/2016/05/23/430621.html ...直接上 ...

    GIF压缩

    gif压缩功能,网上找了很多方法不太行,最后参考了这些博客解决了压缩问题,主要自己记录下。
    参考如下:
    

    http://www.blogjava.net/wangxinsh55/archive/2016/05/23/430621.html
    https://www.jianshu.com/p/f3051c4541e5
    直接上

    package com.whispark.common.exception;
    
    import com.madgag.gif.fmsware.AnimatedGifEncoder;
    import com.madgag.gif.fmsware.GifDecoder;
    import javax.imageio.ImageIO;
    import javax.imageio.ImageReader;
    import javax.imageio.stream.ImageInputStream;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.*;
    import java.util.Iterator;
    
    /**
     * gif图片处理
     * @Author Clint
     * Date on 2020/6/9  18:24
     * explain:
     */
    public class IamgesResize {
    
        /**
         * 获取图片格式
         * @param file   图片文件
         * @return    图片格式
         */
        public static String getImageFormatName(File file)throws IOException{
            String formatName = null;
    
            ImageInputStream iis = ImageIO.createImageInputStream(file);
            Iterator<ImageReader> imageReader =  ImageIO.getImageReaders(iis);
            if(imageReader.hasNext()){
                ImageReader reader = imageReader.next();
                formatName = reader.getFormatName();
            }
    
            return formatName;
        }
    
        /**
         * 剪切图片
         *
         * @param sourcePath        待剪切图片路径
         * @param targetPath    裁剪后保存路径(默认为源路径)
         * @param x                起始横坐标
         * @param y                起始纵坐标
         * @param width            剪切宽度
         * @param height        剪切高度
         *
         * @returns            裁剪后保存路径(图片后缀根据图片本身类型生成)
         * @throws IOException
         */
        public static String cutImage(String sourcePath , String targetPath , int x , int y , int width , int height) throws IOException{
            File file = new File(sourcePath);
            if(!file.exists()) {
                throw new IOException("not found the image:" + sourcePath);
            }
            if(null == targetPath || targetPath.isEmpty()) targetPath = sourcePath;
    
            String formatName = getImageFormatName(file);
            if(null == formatName) return targetPath;
            formatName = formatName.toLowerCase();
    
            // 防止图片后缀与图片本身类型不一致的情况
            String pathPrefix = getPathWithoutSuffix(targetPath);
            targetPath = pathPrefix + formatName;
    
            // GIF需要特殊处理
            if(IMAGE_FORMAT.GIF.getValue() == formatName){
                GifDecoder decoder = new GifDecoder();
                int status = decoder.read(sourcePath);
                if (status != GifDecoder.STATUS_OK) {
                    throw new IOException("read image " + sourcePath + " error!");
                }
    
                AnimatedGifEncoder encoder = new AnimatedGifEncoder();
                encoder.start(targetPath);
                encoder.setRepeat(decoder.getLoopCount());
                for (int i = 0; i < decoder.getFrameCount(); i ++) {
                    encoder.setDelay(decoder.getDelay(i));
                    BufferedImage childImage = decoder.getFrame(i);
                    BufferedImage image = childImage.getSubimage(x, y, width, height);
                    encoder.addFrame(image);
                }
                encoder.finish();
            }else{
                BufferedImage image = ImageIO.read(file);
                image = image.getSubimage(x, y, width, height);
                ImageIO.write(image, formatName, new File(targetPath));
            }
            //普通图片
            BufferedImage image = ImageIO.read(file);
            image = image.getSubimage(x, y, width, height);
            ImageIO.write(image, formatName, new File(targetPath));
    
            return targetPath;
        }
    
        /**
         * 压缩图片
         * @param sourceImage    待压缩图片
         * @param width          压缩图片高度
         * @param height          压缩图片宽度
         */
        private static BufferedImage zoom(BufferedImage sourceImage , int width , int height){
            BufferedImage zoomImage = new BufferedImage(width, height, sourceImage.getType());
            Image image = sourceImage.getScaledInstance(width, height, Image.SCALE_SMOOTH);
            Graphics gc = zoomImage.getGraphics();
            gc.setColor(Color.WHITE);
            gc.drawImage( image , 0, 0, null);
            return zoomImage;
        }
    
        /**
         * 获取不包含后缀的文件路径
         *
         * @param src
         * @return
         */
        public static String getPathWithoutSuffix(String src){
            String path = src;
            int index = path.lastIndexOf(".");
            if(index > 0){
                path = path.substring(0, index + 1);
            }
            return path;
        }
    
        public enum IMAGE_FORMAT{
            BMP("bmp"),
            JPG("jpg"),
            WBMP("wbmp"),
            JPEG("jpeg"),
            PNG("png"),
            GIF("gif");
    
            private String value;
            IMAGE_FORMAT(String value){
                this.value = value;
            }
            public String getValue() {
                return value;
            }
            public void setValue(String value) {
                this.value = value;
            }
        }
    
        /**
         * 压缩图片
         * @param sourcePath       待压缩的图片路径
         * @param targetPath    压缩后图片路径(默认为初始路径)
         * @param width            压缩宽度
         * @param height        压缩高度
         *
         * @returns                   裁剪后保存路径(图片后缀根据图片本身类型生成)
         * @throws IOException
         */
        public static String zoom(String sourcePath , String targetPath, int width , int height) throws IOException{
            File file = new File(sourcePath);
            boolean is = !file.exists();
            if(is) {
                throw new IOException("not found the image :" + sourcePath);
            }
            String targetImgPath = targetPath;
    
            if(null == targetImgPath || targetImgPath.isEmpty()){
                targetImgPath = targetPath;
            }
    
            String formatName = getImageFormatName(file);
            if(null == formatName){
                return targetImgPath;
            }
            formatName = formatName.toLowerCase();
    
            // 防止图片后缀与图片本身类型不一致的情况
            String pathPrefix = getPathWithoutSuffix(targetImgPath);
            targetImgPath = pathPrefix + formatName;
    
            // GIF需要特殊处理
            if(IMAGE_FORMAT.GIF.getValue() == formatName){
                GifDecoder decoder = new GifDecoder();
                int status = decoder.read(file.getPath());
                if (status != GifDecoder.STATUS_OK) {
                    throw new IOException("read image " + file.getPath() + " error!");
                }
                //gif处理工具类 AnimatedGifEncoder
                AnimatedGifEncoder encoder = new AnimatedGifEncoder();
                encoder.start(targetImgPath);
                //获取图片的帧数
                encoder.setRepeat(decoder.getLoopCount());
                //检测输出路径是否存在 否则创建
                File file1 = new File(targetImgPath);
                File parentFile = file1.getParentFile();
                if (!parentFile.exists()) {
                    parentFile.mkdirs();
                }
                //循环处理图片帧数
                int imgCount = decoder.getFrameCount();
                for (int i = 0; i < imgCount; i ++) {
                    encoder.setDelay(decoder.getDelay(i));
                    BufferedImage image = zoom(decoder.getFrame(i), width , height);
                    encoder.addFrame(image);
                }
                encoder.finish();
            }else{
                //其他图片压缩处理
                BufferedImage image = ImageIO.read(file);
                BufferedImage zoomImage = zoom(image , width , height);
                ImageIO.write(zoomImage, formatName, new File(targetImgPath));
            }
    
            return targetPath;
        }
    }
    
    

    最后还需要一个工具包:

    		<dependency>
    			<groupId>com.madgag</groupId>
    			<artifactId>animated-gif-lib</artifactId>
    			<version>1.4</version>
    		</dependency>
    

    好了这样就可以了看下压缩效果
    压缩原图:
    在这里插入图片描述
    压缩后的图
    在这里插入图片描述
    更小的图:
    在这里插入图片描述
    好了有什么问题可以留言,如果有帮到你记得点赞哦!

    展开全文
  • GIF压缩助手是一款十分出色的GIF图片压缩软件,该软件界面简单、体积小巧,能够帮助用户轻松的将体积较大的GIF图片进行压缩,而且压缩的速度非常快,压缩后的图片质量也很高。我们在日常生活中常常会看到很多有趣的...

      GIF压缩助手是一款十分出色的GIF图片压缩软件,该软件界面简单、体积小巧,能够帮助用户轻松的将体积较大的GIF图片进行压缩,而且压缩的速度非常快,压缩后的图片质量也很高。我们在日常生活中常常会看到很多有趣的GIF图片,这种图片是比较占用内存的,如果电脑中保存有大量的GIF图片,同时又想给电脑腾出更多的空间,就可以对电脑中的GIF图片进行压缩操作。那么接下来小编就给大家详细介绍一下GIF压缩助手压缩GIF图片的具体操作方法,有需要的朋友可以看一看并收藏起来。

    6692b2a2dbe3c026934571da1e2d3252.png

    方法步骤

      1.首先打开软件,我们在界面左上角找到“添加文件”按钮,点击该按钮就可以打开文件添加页面。

    bfbb9ca9e90cc71700b7f70df0bdc5cb.png

      2.接着在文件添加页面中,我们选中需要进行压缩的GIF图片后,再点击界面右下角的“打开”按钮就可以了。

    41702f009286d2f12d7b6d9544a77e69.png

      3.将图片添加到软件后,我们在界面左下方找到“修改分辨率”选项,可以勾选该选项,并在其后面的文本框中输入分辨率数值。

    4cebc32b06b74336c14ad790f8fdb642.png

      4.然后在界面下方找到“单位帧数”选项,我们拖动该选项后面的小光标就可以调整单位帧数。

    f1d42eadf8d02aa08161d0fc8b417d71.png

      5.接下来在界面下方找到“浏览”按钮并点击,就会打开浏览文件夹窗口;我们在窗口中设置好文件的保存位置后,再点击窗口底部的“确定”按钮就可以了。

    b1b4b33571f1d9ea73334f8b3539aac4.png

      6.完成以上所有步骤后,我们在界面右下角找到“开始压缩”按钮,点击该按钮就可以开始压缩GIF图片了。

    5c6b770f75f3fd87fc31fc12a5aa1817.png

      7.图片压缩的速度非常快,压缩完毕后,界面上会出现一个压缩完毕的提示窗口,我们点击窗口中的“确定”按钮就可以完成全部的操作步骤。

    c7969dff3ba1c466899186a4ca603035.png

      以上就是小编给大家整理的GIF压缩助手压缩GIF图片的具体操作方法,方法简单易懂,有需要的朋友可以看一看,希望这篇教程对大家有所帮助。

    展开全文
  • gif压缩(压缩出来的质量还是可观的)
  • gif压缩解压c#源代码

    2018-09-25 09:59:56
    gif压缩解压c#源代码,项目中验证过,绝对能用 欢迎下载
  • WinGifTool(gif压缩工具)
  • iOS开发中将视频文件转换为gif图并设置gif压缩尺寸
  • 简介: GIF图像是一种多种静态图像合成的图像,每张图像我们称为一帧...GIF压缩一共从4各方面: 丢帧:一般GIF太大就是帧数太多,如果不影响效果,丢帧可以明显减少提交; 改变颜色:GIF存储很多颜色信息,如果能...

    简介:

    GIF图像是一种多种静态图像合成的图像,每张图像我们称为一帧。一帧就表示一张图片,如果每张图片以一定时间自动播放,则形成了GIF图像。这里一定时间我们称为帧率,表示两帧显示的时间间隔,通常以毫秒为单位。图像中多帧图像除了TIF就是GIF了。

    GIF压缩一共从4各方面:

    1. 丢帧:一般GIF太大就是帧数太多,如果不影响效果,丢帧可以明显减少提交;
    2. 改变颜色:GIF存储很多颜色信息,如果能丢失部分颜色也可以减少提交;
    3. 改变图像质量:图像质量是图像清晰度一个重要指标,牺牲图像质量可以换来更少文件占用体积;
    4. 改变尺寸:缩小图像每帧图像尺寸,就可以减少像素值,而且不会影响图像质量。

    其中丢帧和改变尺寸是最有效方式。

    GIF压缩软件是由未来自主研究中心于2019年发布一款专门用于压缩GIF的软件,目前网上基本都是在线压缩方式,而这款软件是离线完成,不需要网络。由于没有找到其他有效的GIF压缩软件,可以说这款软件是互联网首款用于GIF压缩软件。该软件操作十分简单,不需要什么专业知识即可完成GIF压缩任务。下面是软件1.0版本主界面(正式版或者后续稍微有些不同)。

                                                          图1

    软件参数介绍:

    总帧数:显示GIF总帧数,不可操作,仅用作显示;

    减少帧数:表示每隔几帧抽取图像,例如一个GIF有3帧,如果填写1,则会保留1,3帧,第2帧会被丢弃。如果填写2或者以上则只会是3帧。注意不得填写0帧;

    调整颜色:调整GIF颜色,调整后可能会造成颜色和原来不一样,比如原来是彩色,调整可能变成灰度图像或者黑白图像;

    重设宽高:可以填写宽或者高,但是如果在此模式下,不能都不填写。填写宽不填写高,软件会自动比例计算高,无须担心图像变形问题。填写高不填写宽,软件会自动比例计算宽。填写宽和填写高,软件就会按照指定宽高,这种情形可能导致图像变形。

    比例缩放:将GIF每帧宽高都乘以比例缩放系数,同步缩小尺寸。

    软件使用方法:

    设置参数后点击开始即可,完成后在源文件目录下看到一个同名文件有个下划线+压缩文件即是压缩后的文件,更详细请观看官方教程!由于软件为共享版软件,这里只是介绍,购买请在某宝或者闲鱼搜搜GIF压缩软件或者GIF压缩工具看看!

                                                                                                                                                                           未来自主研究中心

                                                                                                                                                                         2019年1月15日发布

    展开全文
  • GIF压缩工具

    2018-10-01 22:17:53
    该工具采用了Java Swing 的技术开发,仿MAC界面UI,并且依赖于精简版的jre包运行。不但可以压缩GIF动态图,还可以自定义设置压缩比。
  • 最近比较堕落,没找到新鲜素材。索性再写一篇Python处理日常任务的文章。...某些在线压缩gif的网站也的确好用,比如:但对于某些过大的gif文件,它在完成压缩之后,我们有可能下载不下来。(这也许...

    最近比较堕落,没找到新鲜素材。索性再写一篇Python处理日常任务的文章。

    做自媒体的朋友为了让自己的文章内容生动有趣一些,可能会选择增加gif文件到文章里面。但是,为了上传的速度够快,或者如果是用自己的服务器存储gif文件,我们肯定不希望gif文件过大,这时候就需要压缩gif文件。某些在线压缩gif的网站也的确好用,比如:

    但对于某些过大的gif文件,它在完成压缩之后,我们有可能下载不下来。(这也许和网络有关,我就遇到过这类事情)

    于是,再度发扬自立自足的精神,我们来用Python压缩Gif文件。毕竟,python除了不会生孩子,还有什么不会?

    我们走起!

    大体思路:用Python分析原始gif文件,然后依据多帧数据生成许许多多不同的png文件。接下来,我们删除部分图片,比如只使用索引值为奇数的png来合成新的gif(下面的代码所保留的png图片则是5n)。这样一来,图片的尺寸就小了。

    #! /usr/local/bin/python3

    # -*- coding: utf-8 -*-

    from PIL import Image

    import os

    import imageio

    def AnalysisGif( gifPath ):

    image = Image.open(gifPath)

    pngDir = gifPath[:-4]

    if os.path.exists( pngDir ):

    files = os.listdir( pngDir )

    for file in files:

    file = pngDir + "/" + file

    os.remove( file )

    os.rmdir( pngDir )

    os.mkdir( pngDir )

    try:

    while True:

    current = image.tell()

    pngPath = pngDir+'/'+str(current)+'.png'

    image.save( pngPath, quality = 100 )

    image.seek( current+1 )

    except EOFError:

    print( EOFError )

    pass

    def Combine2Gif( folderPath, gifFilePath ):

    files = os.listdir( folderPath )

    pngFiles = []

    for i in range(0, len(files), 5):

    pngFiles.append( folderPath + "/" + ('%d.png' % i) )

    GenerateGif( 0.1, gifFilePath, pngFiles )

    def GenerateGif(step, gifPath, filterPngs):

    images = []

    for filePath in filterPngs:

    images.append( imageio.imread(filePath) )

    imageio.mimsave( gifPath, images, duration = step )

    if __name__ == "__main__":

    gifPath = "/Users/weiyang/Desktop/test.gif"

    AnalysisGif( gifPath )

    Combine2Gif( gifPath[:-4], gifPath[:-4]+"_result.gif" )

    print( "== finished ==" )

    如果对gif的质量要求不高,我们甚至可以用OpenCV把gif转成黑白样式。这需要提前为Python安装OpenCV库。如果你对这种方式感兴趣,可以浏览:

    展开全文
  • gif 压缩水印类

    2016-09-19 14:28:34
    压缩gif 水印gif
  • GIF压缩工具.exe

    2020-08-15 17:24:03
    GIF极限压缩工具_公众号动图压缩
  • 压缩gif使用-layers方法Optimize:convert source.gif -layers Optimize dest.gif可惜的是,以上的命令只适用于卡通类的gif……如果你的gif是从录制的视频转化而来的,通常压缩不了多少,甚至可能比原文件更大。...
  • 前端gif压缩

    2020-12-17 18:25:27
    一开始做这个需求的时候,我在网上看了好多在线压缩gif的工具,基本上都是后台实现的,没看到一个纯前端实现压缩的。 只能自己想办法了,一开始我的思路是:方案一:将gif分解,得到一帧一帧的图片,然后将每帧的...
  • GIF图片比起常用的JPG、PNG等格式的静态图片来说,gif图片显得...今天小编就来给大家分享一个gif压缩的办法,手把手教你只需三步就能轻松得把gif图片体积降低一半。第一步:首先打开压缩图网站,选择GIF压缩。第二...
  • 网页动画GIF压缩软件

    2010-07-26 23:44:40
    GIF压缩软件这个工具很好,能够不影响图片的质量情况下进行压缩,从而达到更好的浏览效果
  • 本文GIF压缩原理参考 Gif压缩,后面的代码是我整理的博主的代码,修改了其中一小部分,是在配置好环境后可执行的代码。 1. GIF的存储格式 1)文件头 GIF格式文件头包含三部分: 格式声明 Signature: 为 “GIF”3...
  • GIF压缩工具(Java)

    2018-09-30 15:51:38
    该工具用于对GIF文件进行压缩压缩方法为按比例缩小GIF的长和宽。 该工具为Java编写并转制成EXE。
  • 使用PIL、imageio,将gif拆帧、压缩、合成。博主使用的是PyCharm工具。1、安装imageio。File-->Settings-->Project:pro-->Project Interpreter-->点击 右上角的“+”搜索“imageio”安装。2、提取gif每...
  • GIF压缩器 使用设备上可用的硬件加速的Android编解码器,将GIF文件压缩为MP4格式的Android工具。 适用于API 18+。 implementation ' com.otaliastudios.gif:compressor:1.0.0 ' 快速压缩到轻量级MP4(AVC) 硬件...
  • GIF压缩助手 v1.0.zip

    2021-01-08 11:07:37
    随意修改GIF动态图的大小,方便用作QQ、微信等聊天表情制作
  • 作者使用的C#封装了Gifsicle工具,和其它GIF压缩助手小工具,WinForGIFSicle 这款工具压缩比最高,有按比例压缩和按压缩比压缩等功能,支持拖拽多个GIF图像自动批量压缩,添加文件名时间信息等操作。 ...
  • 动画GIF比任何其他数字图像格式都已根深蒂固于在线文化中。 JPEG或多或少是传统摄影的延续,但GIF是新的且功能强大。 在过去的十年中,广泛的宽带已导致视频流传输,但是在此之前,轻松共享... 但是,GIF格式在压缩...
  • 多媒体 || GIF压缩与JPEG压缩的对比

    千次阅读 2018-12-09 19:44:48
    其中GIF格式采用的是LZW的无损压缩算法,这是一种字典索引的压缩方法,原理是减少每点的存储位数以减少图像文件的大小,也就是通常所说的颜色抖动。因而实际存储数据的并不是图像的直接色彩,而是存储的index,通过...
  • 之前录屏后一般都是上ezgif网站,上传文件,选取时间,转成gif压缩,下载。作为懒人,觉得这步骤太繁琐,决定用python实现这个功能,顺便加了一个水印功能。效果预览源视频文件...
  • One well known method to compress image files is the Graphics Interchange Format (GIF) encoding, created by CompuServe in 1987. Here’s a simplified version applied to strings of alphabetic characters...
  • gif 压缩 加水印工程

    2019-10-07 11:27:18
    111 转载于:https://www.cnblogs.com/qianxinxu/p/6227591.html

空空如也

空空如也

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

gif压缩