Is there anyway to resize animated gif image using java tech.
Thanks in advance
DF
I don't know a direct answer.
I think java can do 2D zooming, so the answer would
be "yes" if you can get the induividual frames
our, zoom, and ressemble.
As a side FYI, I think ImageMagick can do it in one hit.
BugBear
Is that a question? Note that adding '?'
helps the reader to identify the question,
and you would want to *help* people, to
help you, no?
In any case..
Sure. Bugbear probably identified the
robust and correct approach, so I'll
just jump in with another that is quick
and (very) hackish.
<sscce>
import javax.swing.*;
import java.io.File;
import java.net.URL;
/**
Swing components can parse simple HTML like..
<html>
<body bgcolor='black'>
<img src='./plnttm.gif' width='150' height='150' ><br>
<img src='./plnttm.gif' width='300' height='300' >
</body>
</html>
'pntthmb.gif is an animated GIF in the same
directory as the HTML.
*/
class ResizeableAnimatedImage extends JPanel {
public static void main(String[] args) throws Exception {
JEditorPane jep = new JEditorPane();
File file = new File( ".","images.html" );
URL url = file.toURI().toURL();
jep.setPage(url);
JOptionPane.
showMessageDialog( null, jep );
}
}
</sscce>
HTH
Andrew T.
package test.image;
/**
* @@author Dishan Fernando
*
*/
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CGif {
String srcFileName = null;
String dstFileName = null;
FileOutputStream fileOutputStream = null;
public CGif(String srcFileName, String dstFileName) throws
FileNotFoundException{
this.srcFileName = srcFileName;
this.dstFileName = dstFileName;
this.fileOutputStream = new FileOutputStream(dstFileName);
}
public void saveAsFormattedGif(int width, int height) throws
IOException{
GifDecoder gifDecoder = new GifDecoder();
AnimatedGifEncoder animatedGifEncoder = new AnimatedGifEncoder();
gifDecoder.read(this.srcFileName);
int frameCount = gifDecoder.getFrameCount();
int loopCount = gifDecoder.getLoopCount();
animatedGifEncoder.setRepeat(loopCount);
animatedGifEncoder.start(fileOutputStream);
for (int frameNumber = 0; frameNumber < frameCount; frameNumber++) {
BufferedImage frame = gifDecoder.getFrame(frameNumber); // frame
i
int delay = gifDecoder.getDelay(frameNumber); // display
duration of frame in milliseconds
animatedGifEncoder.setDelay(delay); // frame delay per sec
animatedGifEncoder.addFrame( CUtil.resizeToMaxAndCrop(frame,
width, height) );
}
animatedGifEncoder.finish();
fileOutputStream.flush();
fileOutputStream.close();
}
public static void main(String[] args) {
try {
CGif gif = new CGif("E:\\10512Decorations_400x400.gif", "E:\
\128x128.gif");
gif.saveAsFormattedGif(128, 128);
System.out.println("done!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Where are the imports for these classes?
It seems (from vague memory) you are now
using the library made by Kevin Weiner to
decode/encode the GIF's, but I cannot see
where they are imported to the code.
Andrew T.
I looked at the code more closely thatn your
other words. What is 'export DISPLAY=:1.0'?
I do not see it referenced anywhere else in
the code.
If it is a screen ratio, there may be a problem
because the code is working in a 'headless' or
non GUI'd environment in tomcat.
Andrew T.
If Tomcat runs as a daemon or under control of a web server, then
setting DISPLAY or even assuming there is a display is not the right
approach.
There are a number of reasons why system daemons should not attempt to
connect to a display or even assume the existence of one.
Have you tried setting -Djava.awt.headless=true?
/gordon
--
[ don't email me support questions or followups ]
g o r d o n + n e w s @ b a l d e r 1 3 . s e
DISPLAY is an environment variable used in Unix/Linux to tell the X
Windows system where (on which physical/logical screen) output should be
displayed. Tomcat should not interact with X Windows.