最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)動(dòng)態(tài)生成GIF圖像詳解

 更新時(shí)間:2022年09月13日 11:17:20   作者:yelangking1  
在互聯(lián)網(wǎng)上有許多有趣的場(chǎng)景,其中的一種就是動(dòng)圖。這不是視頻,而是一種GIF圖像信息。本文將利用Java實(shí)現(xiàn)動(dòng)態(tài)生成GIF圖像功能,需要的可以參考一下

背景

在互聯(lián)網(wǎng)上有許多有趣的場(chǎng)景,其中的一種就是動(dòng)圖。這不是視頻,而是一種GIF圖像信息。雖然沒有聲音,卻給我們帶來了無窮的樂趣。如果說斗圖是曾經(jīng)聊天或者網(wǎng)聊的樂趣,那動(dòng)圖一定是承包了這種歡樂的技術(shù)原理。

GIF的全稱是Graphics Interchange Format,可譯為圖形交換格式,用于以超文本標(biāo)志語(yǔ)言(Hypertext Markup Language)方式顯示索引彩色圖像,在因特網(wǎng)和其他在線服務(wù)系統(tǒng)上得到廣泛應(yīng)用。GIF是一種公用的圖像文件格式標(biāo)準(zhǔn),版權(quán)歸Compu Serve公司所有。

那么這些GIF圖片可以使用什么技術(shù)來生成呢?今天分享一種JAVA的實(shí)現(xiàn),基于開源庫(kù)AnimatedGifEncoder,動(dòng)態(tài)構(gòu)建GIF圖庫(kù)。掌握了這個(gè)技術(shù),加上你天才的頭腦,一定可以發(fā)揮出獨(dú)特的創(chuàng)意,創(chuàng)作出充滿智慧或者可以令人腦洞大開的內(nèi)容。不多說,正式開始吧。

特點(diǎn)

GIF格式的圖像文件具有如下特點(diǎn):

(1)GIF格式圖像文件的擴(kuò)展名是“.gif”;

(2)對(duì)于灰度圖像表現(xiàn)最佳;

(3)具有GIF87a和GIF89a兩個(gè)版本;

(4)采用改進(jìn)的LZW壓縮算法處理圖像數(shù)據(jù);

(5)調(diào)色板數(shù)據(jù)有通用調(diào)色板和局部調(diào)色板之分,有不同的顏色取值;

(6)不支持24bit彩色模式,最多存儲(chǔ)256色。

用途

①GIF是壓縮格式的文件,用于減少文件在網(wǎng)絡(luò)上傳遞的時(shí)間;

②GIF的位深為1-8bit,單色透明,由一個(gè)最多256種顏色的調(diào)色板實(shí)現(xiàn),圖像大小最多為64K×64K像素。GIF主要是為一個(gè)數(shù)據(jù)流而設(shè)計(jì)的一種傳輸格式,而不是作為文件的存當(dāng)格式,因此它是最復(fù)雜的一種圖像文件格式;

③支持Bitmap、Grayscale和索引彩色模式。

AnimatedGifEncoder簡(jiǎn)介

AnimatedGifEncoder是Kevin Weiner編寫的,其作者授權(quán)所有人可以以任何方式使用這份代碼,但是需要注意代碼中所使用的LZW算法由Unisys掌握專利權(quán)。不過鑒于此專利在2006年就已經(jīng)在大部分國(guó)家及地區(qū)過期了,所以現(xiàn)在應(yīng)該可以放心地使用了。

GIF創(chuàng)作生成

一、創(chuàng)建maven項(xiàng)目

新建一個(gè)maven項(xiàng)目,引入相關(guān)資源包。關(guān)鍵代碼如下所示:

<!-- https://mvnrepository.com/artifact/com.madgag/animated-gif-lib -->
<dependency>
	<groupId>com.madgag</groupId>
	<artifactId>animated-gif-lib</artifactId>
	<version>1.4</version>
</dependency>

二、自定義生成

自定義生成之指,直接使用系統(tǒng)創(chuàng)建的方式來生成gif,不使用外部的圖片、視頻等資源,直接在界面上繪制一個(gè)GIF圖。下面給出關(guān)鍵代碼:

package com.yelang.mp42gif;
 
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
 
import com.madgag.gif.fmsware.AnimatedGifEncoder;
 
public class PageTest {
 
	public static final int SIZE = 200;
	 
    public static void main(String[] args) throws IOException {
        AnimatedGifEncoder encoder = new AnimatedGifEncoder();
        encoder.start("D:/giftest/out.gif");
        encoder.setTransparent(Color.WHITE);
        encoder.setRepeat(0);
        encoder.setDelay(50);
 
        BufferedImage img = new BufferedImage(SIZE, SIZE, BufferedImage.TYPE_3BYTE_BGR);
        Graphics2D g2d = img.createGraphics();
 
        for (int i=0; i<100; i++) {
            g2d.setColor(Color.WHITE);
            g2d.fillRect(0, 0, SIZE, SIZE);
            g2d.setColor(Color.BLACK);
            g2d.drawOval(0, i, 120, 120);
            encoder.addFrame(img);
        }
 
        g2d.dispose();
        encoder.finish();
        System.out.println("完成");
    }
 
}

執(zhí)行完成后,在目標(biāo)文件夾下,可以看到輸出了gif圖片,

將out.gif文件拖拽到瀏覽器中,可以看到動(dòng)態(tài)的效果,如下圖:

三、自定義將多張圖片合成

在一些需求里,比如根據(jù)給定的多張圖片(比如下面1-4.jpg四張)來合成一張gif圖片。這種需求又如何來實(shí)現(xiàn)呢?這里重點(diǎn)介紹這種需求的解決方案。

1、定義原始的數(shù)據(jù)源

BufferedImage image1 = ImageIO.read(new File("D:/giftest/dir2/1.jpg"));
BufferedImage image2 = ImageIO.read(new File("D:/giftest/dir2/2.jpg"));
BufferedImage image3 = ImageIO.read(new File("D:/giftest/dir2/3.jpg"));
BufferedImage image4 = ImageIO.read(new File("D:/giftest/dir2/4.jpg"));

上述代碼將原始的圖片轉(zhuǎn)換成輸入流備用

2、gif對(duì)象設(shè)置

 AnimatedGifEncoder e = new AnimatedGifEncoder();
// 設(shè)置生成圖片大小
e.setSize(4000, 3000);
//生成的圖片路徑
	    
e.start("D:/giftest/dir2/demo1.gif");
//圖片之間間隔時(shí)間
e.setDelay(500); 
//重復(fù)次數(shù) 0表示無限重復(fù) 默認(rèn)不重復(fù)
e.setRepeat(0);
e.setQuality(5);

3、圖片填充

//添加圖片
e.addFrame(image1);
e.addFrame(image2);
e.addFrame(image3);
e.addFrame(image4);
e.finish();

完成的代碼如下:

public static void test3() throws IOException {
		BufferedImage image1 = ImageIO.read(new File("D:/giftest/dir2/1.jpg"));
	    BufferedImage image2 = ImageIO.read(new File("D:/giftest/dir2/2.jpg"));
	    BufferedImage image3 = ImageIO.read(new File("D:/giftest/dir2/3.jpg"));
	    BufferedImage image4 = ImageIO.read(new File("D:/giftest/dir2/4.jpg"));
	    AnimatedGifEncoder e = new AnimatedGifEncoder();
	    // 設(shè)置生成圖片大小
	    e.setSize(4000, 3000);
	    //生成的圖片路徑
	    
	    e.start("D:/giftest/dir2/demo1.gif");
	    //圖片之間間隔時(shí)間
	    e.setDelay(500); 
	    //重復(fù)次數(shù) 0表示無限重復(fù) 默認(rèn)不重復(fù)
	    e.setRepeat(0);
	    e.setQuality(5);
	    //添加圖片
	    e.addFrame(image1);
	    e.addFrame(image2);
	    e.addFrame(image3);
	    e.addFrame(image4);
	    e.finish();
	    System.out.println("finish");
	}

執(zhí)行完成后,可以看到生成GIF圖如下:

話外題-懷念巨人

GIF的發(fā)明者是美國(guó)計(jì)算機(jī)科學(xué)家、GIF圖像格式發(fā)明人斯蒂芬•威爾海特(Stephen Wilhite)。據(jù)美國(guó)媒體報(bào)道,當(dāng)?shù)貢r(shí)間3月14日,gif的發(fā)明者斯蒂芬·威爾海特因疫情去世,享年74歲。他的妻子凱瑟琳在接受采訪時(shí)提到,威爾海特去世前他的家人都陪伴在他的身邊,而在訃告中也提到“盡管取得了諸多成就,但他仍然是一個(gè)非常謙遜、善良的好人。”

總結(jié)

本文簡(jiǎn)要講述了GIF圖像知識(shí),并且以JAVA技術(shù)為例,介紹了后臺(tái)生成GIF的技術(shù),并提供較詳細(xì)的代碼示例,希望對(duì)您有幫助。最后懷念因新冠感染去世的GIF的發(fā)明者,斯蒂芬•威爾海特。感恩這個(gè)時(shí)代,我們站在無數(shù)巨人的肩膀上,以至于可以專心去享受這些技術(shù)帶來的快感。

以上就是Java實(shí)現(xiàn)動(dòng)態(tài)生成GIF圖像詳解的詳細(xì)內(nèi)容,更多關(guān)于Java生成GIF的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 舉例講解Java的Spring框架中AOP程序設(shè)計(jì)方式的使用

    舉例講解Java的Spring框架中AOP程序設(shè)計(jì)方式的使用

    這篇文章主要介紹了Java的Spring框架中AOP程序設(shè)計(jì)方式的使用講解,文中舉的AOP下拋出異常的例子非常實(shí)用,需要的朋友可以參考下
    2016-04-04
  • Java中各種集合判空方法總結(jié)

    Java中各種集合判空方法總結(jié)

    最近接觸集合比較多,經(jīng)常對(duì)于集合是否為空做判斷,下面這篇文章主要給大家介紹了關(guān)于Java中各種集合判空方法總結(jié)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 帶你快速搞定java IO

    帶你快速搞定java IO

    這篇文章主要介紹了Java IO流 文件傳輸基礎(chǔ)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下,希望能給你帶來幫助
    2021-07-07
  • HashMap確定key的存儲(chǔ)位置的源碼分析

    HashMap確定key的存儲(chǔ)位置的源碼分析

    HashMap 作為 Java 中最常用的數(shù)據(jù)結(jié)構(gòu)之一,用于存儲(chǔ)和管理鍵值對(duì),HashMap 基于哈希函數(shù)實(shí)現(xiàn),能通過將 key 映射到特定的位置來實(shí)現(xiàn)快速存儲(chǔ)、查找和刪除數(shù)據(jù),接下來將從源碼角度分析以通俗易懂的方式向大家講解一下 HashMap 如何確定 key 的存儲(chǔ)位置的
    2023-07-07
  • Java中對(duì)象的銷毀方法分析

    Java中對(duì)象的銷毀方法分析

    這篇文章主要介紹了Java中對(duì)象的銷毀方法,較為詳細(xì)的分析了對(duì)象的功能、用法及銷毀對(duì)象對(duì)于程序運(yùn)行的益處,需要的朋友可以參考下
    2015-04-04
  • JavaWeb之Filter與Listener使用解析

    JavaWeb之Filter與Listener使用解析

    這篇文章主要介紹了JavaWeb之Filter與Listener使用解析,Filter表示過濾器,是JavaWeb三大組件(Servlet、Filter、Listener)之一,過濾器可以把對(duì)資源的請(qǐng)求攔截下來,從而實(shí)現(xiàn)一些特殊的功能,需要的朋友可以參考下
    2024-01-01
  • Java中字符串截取方法詳解及實(shí)際應(yīng)用小結(jié)

    Java中字符串截取方法詳解及實(shí)際應(yīng)用小結(jié)

    java中截取字符串的常用方法是使用String類的substring方法,本文通過實(shí)例代碼給大家介紹Java中字符串截取方法詳解及實(shí)際應(yīng)用小結(jié),感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • SpringMVC攔截器實(shí)現(xiàn)單點(diǎn)登錄

    SpringMVC攔截器實(shí)現(xiàn)單點(diǎn)登錄

    這篇文章主要介紹了SpringMVC攔截器實(shí)現(xiàn)單點(diǎn)登錄,簡(jiǎn)單介紹了springmvc攔截器,單點(diǎn)登錄實(shí)現(xiàn)原理等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • 通過xml配置SpringMVC注解DispatcherServlet初始化過程解析

    通過xml配置SpringMVC注解DispatcherServlet初始化過程解析

    這篇文章主要為大家介紹了通過xml配置SpringMVC注解DispatcherServlet初始化過程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Java分層概念詳解

    Java分層概念詳解

    這篇文章主要介紹了Java分層概念詳解,內(nèi)容十分詳細(xì),在這里給大家分享下,需要的朋友可以參考。
    2017-09-09

最新評(píng)論

华蓥市| 德昌县| 武隆县| 绥化市| 崇阳县| 广宗县| 桐乡市| 页游| 海南省| 邯郸县| 黄龙县| 扶沟县| 怀来县| 濮阳县| 绥宁县| 宁南县| 昭通市| 开阳县| 宾阳县| 额敏县| 噶尔县| 大庆市| 郓城县| 大悟县| 鹤庆县| 象州县| 淳化县| 陈巴尔虎旗| 内黄县| 奎屯市| 钦州市| 石城县| 兴山县| 香河县| 梁山县| 九江市| 吴桥县| 迁西县| 观塘区| 长葛市| 贵溪市|