GIF解码和编码操作库源码Word格式.docx

上传人:b****6 文档编号:19743169 上传时间:2023-01-09 格式:DOCX 页数:45 大小:35.90KB
下载 相关 举报
GIF解码和编码操作库源码Word格式.docx_第1页
第1页 / 共45页
GIF解码和编码操作库源码Word格式.docx_第2页
第2页 / 共45页
GIF解码和编码操作库源码Word格式.docx_第3页
第3页 / 共45页
GIF解码和编码操作库源码Word格式.docx_第4页
第4页 / 共45页
GIF解码和编码操作库源码Word格式.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

GIF解码和编码操作库源码Word格式.docx

《GIF解码和编码操作库源码Word格式.docx》由会员分享,可在线阅读,更多相关《GIF解码和编码操作库源码Word格式.docx(45页珍藏版)》请在冰豆网上搜索。

GIF解码和编码操作库源码Word格式.docx

frame 

per 

sec

e.addFrame(src);

e.setDelay(1000);

e.addFrame(src1);

e.setDelay(100);

e.addFrame(src2);

e.finish();

}catch(IOException 

e){

e.printStackTrace();

}

下面的例子来自:

ideas

多张jpg图合成gif动画

/**

把多张jpg图片合成一张

@param 

pic 

String[] 

多个jpg文件名 

包含路径

newPic 

String 

生成的gif文件名 

*/ 

private 

synchronized 

jpgToGif(String 

pic[], 

newPic) 

{

try 

e.start(newPic);

src[] 

BufferedImage[pic.length];

for 

(int 

0;

<

src.length;

i++) 

e.setDelay(200);

//设置播放的延迟时间

src[i] 

File(pic[i]));

读入需要播放的jpg文件

e.addFrame(src[i]);

//添加到帧中

catch 

(Exception 

e) 

System.out.println( 

"

jpgToGif 

Failed:

gif动画分解成多张jpg

/** 

*//**

把gif图片按帧拆分成jpg图片 

gifName 

小gif图片(路径+名称)

path 

生成小jpg图片的路径

@return 

返回生成小jpg图片的名称

*/

splitGif(String 

gifName,String 

path) 

GifDecoder 

decoder 

GifDecoder();

decoder.read(gifName);

int 

decoder.getFrameCount();

//得到frame的个数

subPic 

String[n];

tag 

this.getTag();

n;

decoder.getFrame(i);

//得到帧

//int 

delay 

decoder.getDelay(i);

//得到延迟时间

//生成小的JPG文件

subPic[i] 

String.value(i)+ 

.jpg"

;

FileOutputStream 

out 

FileOutputStream(subPic[i]);

ImageIO.write(frame, 

jpeg"

 

out);

JPEGImageEncoder 

encoder 

JPEGCodec.createJPEGEncoder(out);

encoder.encode(frame);

//存盘 

out.flush();

out.close();

return 

subPic;

splitGif 

Failed!

null;

根据提供的文字生成jpg图片

文字

smallWidth 

每个字的宽度和高度是一样的

bgcolor 

Color 

背景色

fontcolor 

字色

fontPath 

字体文件

jpgname 

jpg图片名

@return

createJpgByFont(String 

s, 

smallWidth,Color 

bgcolor,Color 

fontcolor,String 

fontPath,String 

jpgname) 

bimage 

BufferedImage(s.length()*smallWidth,

smallWidth,BufferedImage.TYPE_INT_RGB);

Graphics2D 

bimage.createGraphics();

g.setColor(bgcolor);

//背景色

g.fillRect(0, 

0, 

smallWidth, 

smallWidth);

//画一个矩形

//去除锯齿(当设置的字体过大的时候,会出现锯齿) 

g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

g.setColor(fontcolor);

//字的颜色

File 

file 

File(fontPath);

//字体文件

//根据字体文件所在位置,创建新的字体对象(此语句在jdk1.5下面才支持) 

Font 

font 

Font.createFont(Font.TRUETYPE_FONT, 

file);

//font.deriveFont(float 

f)复制当前 

对象并应用新设置字体的大小 

g.setFont(font.deriveFont((float) 

smallWidth));

g.drawString(s,0, 

//在指定坐标除添加文字

g.dispose();

FileOutputStream(jpgname);

//指定输出文件

JPEGEncodeParam 

param 

encoder.getDefaultJPEGEncodeParam(bimage);

param.setQuality(50f, 

true);

encoder.encode(bimage, 

param);

//存盘

createJpgByFont 

多张小jpg图合成一张大JPG图,在这里对大图只作宽度限制,不做高度限制

将多个小图片合成一张大jpg图 

(小的jpg图片按照行列顺序平铺)

smallJPG 

ArrayList 

一组小的jpg图片

bigWidth 

大图宽度

单个文字生成的小图的宽度和高度是一致的

createBigJPG(ArrayList 

smallJPG, 

bigWidth,

smallHeigh,Color 

bgColor 

String 

picName) 

if 

(bigWidth 

smallWidth) 

//如果大图片的高度比小图片的高度还小 

直接返回

return;

colCount 

smallWidth;

//每行放置的字数

leftMargin 

(int) 

((bigWidth 

2f);

//左边距

rowCount 

smallJPG.size();

//小图行数 

setWidth 

bigWidth;

//每列中间不留空隙,只留左右边距

setHeight 

//按照大图片宽高绘制一个背景图片

bufImage 

BufferedImage(setWidth, 

setHeight,

BufferedImage.TYPE_INT_RGB);

bufImage.createGraphics();

g.setColor(bgColor);

//背景的颜色

setWidth, 

setHeight);

//纵坐标

rowCount;

//遍历每行

col 

(ArrayList) 

(smallJPG.get(i));

leftMargin;

//横坐标 

可能会出现左边距

col.size();

j++) 

(String) 

(col.get(j));

ImageIcon 

icon 

ImageIcon(jpgname);

Image 

img 

icon.getImage();

imgWidth 

img.getHeight(null);

g.drawImage(img, 

x, 

y, 

null);

+= 

imgWidth;

(smallWidth);

FileOutputStream(picName);

//设置文件格式

encoder.getDefaultJPEGEncodeParam(bufImage);

//从图片缓冲中读取

encoder.encode(bufImage, 

createBigJPG 

注:

(1)AnimatedGifEncoder和GifDecoder,以及这两个类涉及到的相关类,在网上搜索一下就可以找到。

(2)在linux系统下,如果你想支持更多系统外的字体,使用下面两句话,可以不用为系统添加字体,直接把字体文件拷贝到相应位置即可,但是需要jdk1.5环境。

//根据字体文件所在位置,创建新的字体对象

如果是jdk1.5以下版本则需要为系统添加字体,因为createFont(int 

fontFormat, 

fontFile) 

这个方法,是从1.5才开始有的。

(3)g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

我在测试中发现,当设置的字体过大的时候,会出现很明星的锯齿,后来在网上找到了这个解决方法。

(4)有了以上几个方法,就可以做出更好看的闪信了。

我也是因为需求才写下这些方法的,美工做了一些热门词汇的gif图片,在短信转彩信遇到这些词汇时,要使用提供的图片替换文字。

AnimatedGifEncoder.java源码(处理GIF图片)

2007-01-1017:

49

java.awt.*;

Class 

Encodes 

GIF 

consisting 

of 

one 

or

more 

frames.

pre>

Example:

e.start(outputFileName);

e.addFrame(image1);

e.addFrame(image2);

/pre>

No 

copyright 

asserted 

on 

the 

source 

code 

this 

class. 

May 

be 

used

any 

purpose, 

however, 

refer 

to 

Unisys 

LZW 

patent 

restrictions

use 

associated 

LZWEncoder 

Please 

forward 

corrections

kweiner@.

*

@author 

Kevin 

Weiner, 

FM 

Software

@version 

1.03 

November 

2003

protected 

width;

image 

size

height;

transparent 

color 

given

transIndex;

index 

in 

table

repeat 

-1;

no 

repeat

(hundredths)

boolean 

started 

false;

ready 

output 

frames

OutputStream 

out;

image;

current 

frame

byte[] 

pixels;

BGR 

byte 

array 

from 

indexedPixels;

converted 

indexed 

palette

colorDepth;

number 

bit 

planes

colorTab;

RGB 

boolean[] 

usedEntry 

boolean[256];

active 

palette 

entries

palSize 

7;

table 

size 

(bits-1)

dispose 

disposal 

(-1 

default)

closeStream 

close 

stream 

when 

finished

firstFrame 

true;

sizeSet 

fals

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1