哪位知道如何用JAVA进行图形文件的缩放? 是使用JAVA2D 或是有第三方的软件?

haichuang 2002-06-10 08:12:21
要求必须可以在 Solaris 2.8下使用的.

谢谢!
...全文
31 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
haichuang 2002-06-18
  • 打赏
  • 举报
回复
非常感谢几位对我的帮助,此问题已经解决,现将解决方案列出,希望对各位有用:
================================================

import javax.imageio.*;
import javax.imageio.stream.*;
import java.io.*;
import java.util.*;
import java.awt.image.*;
import java.awt.image.renderable.*;
import java.awt.Image;
import javax.media.jai.*;



public class ImageTools {

public static final int SCALE_TYPE_NORMAL=0;
public static final int SCALE_TYPE_WIDTH=1;
public static final int SCALE_TYPE_HEIGHT=2;
public static final int SCALE_TYPE_AUTO=3;

public ImageTools() {
}
/*
public static boolean resize(int width, int height, String srcFile, String desFile) throws IOException{
File src=new File(srcFile);
ImageInputStream iis = ImageIO.createImageInputStream(src);
ImageReader ir = (ImageReader)ImageIO.getImageReaders(iis).next();
String fileFormat = ir.getFormatName();
BufferedImage sImage=ImageIO.read(src);
iis.close();
File des=new File(desFile);
//Image sImage = java.awt.Toolkit.getDefaultToolkit().getImage(srcFile);
Image sImage = ImageIO.read(src);
Image dImg=sImage.getScaledInstance(width,height,sImage.SCALE_DEFAULT);
BufferedImage dImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
dImage.getGraphics().drawImage(dImg,0,0,null);
return ImageIO.write(dImage,"jpg",des);
}
*/
private static RenderedOp getImage(String srcFile){
return JAI.create("fileload",srcFile);
}
public static boolean resize(float xscale, float yscale, float xtrans, float ytrans, Interpolation interp,String srcFile, String desFile){
RenderedOp ro = getImage(srcFile);
ParameterBlock pb = new ParameterBlock();
pb.addSource(ro);
pb.add(xscale);
pb.add(yscale);
pb.add(xtrans);
pb.add(ytrans);
if (interp == null) {
interp = Interpolation.getInstance(Interpolation.INTERP_NEAREST);
}
pb.add(interp);
ro=JAI.create("scale", pb);
JAI.create("filestore",ro,desFile,"jpeg",null);
return true;
}
//*/
public static boolean resize(int width, int height, String srcFile, String desFile, int type){
RenderedOp ro = getImage(srcFile);
float xscale=1.0f;
float yscale=1.0f;
switch(type){
case 0:
xscale = (float)width/(float)ro.getWidth();
yscale = (float)height/(float)ro.getHeight();
break;
case 1:
xscale = (float)width/(float)ro.getWidth();
yscale=xscale;
break;
case 2:
yscale = (float)height/(float)ro.getHeight();
xscale = yscale;
break;
case 3:
if(ro.getHeight()>ro.getWidth()){
yscale = (float)height/(float)ro.getHeight();
xscale = yscale;
}
else{
xscale = (float)width/(float)ro.getWidth();
yscale = xscale;
}
break;
}
return resize(xscale,yscale,0.0F,0.0F,null,srcFile,desFile);
}

public static void main(String[] args) throws IOException{
int width = Integer.parseInt(args[0]);
int height = Integer.parseInt(args[1]);
long sTime = System.currentTimeMillis();
ImageTools.resize(width,height,args[2],args[3],ImageTools.SCALE_TYPE_AUTO);
long dTime = System.currentTimeMillis();
System.out.println("use time: "+(dTime-sTime));
}
}

========================================
此例中使用了两种方法,分别是使用JAI和ImageIO,但是使用ImageIO方法需要操作系统有图形支持,因为我的Solaris未安装XWindows所以不能用.而JAI则需要安装对应的包.各位可以做为参考.
haichuang 2002-06-12
  • 打赏
  • 举报
回复
建立了Image对象后如何再将它按指定格式写入文件呢?
fightboy 2002-06-12
  • 打赏
  • 举报
回复
对于jdk1。3

http://java.sun.com/products/java-media/jai/forDevelopers/jai1_0_1guide-unc/Encode.doc.html

对于jdk1。4

http://java.sun.com/j2se/1.4/docs/guide/imageio/spec/apps.fm4.html

我还没试出来,结果出来了可否给告知一下!
(注意写了文件要flush并close)
haichuang 2002-06-11
  • 打赏
  • 举报
回复
是这样的,假设我有一个800*600的图象文件,而我现在要把它们缩小到200*100尺寸, 就是这样.
至于为什么说根在Solaris 2.8下使用是因为有的JAVA工具是使用了本地库技术的,如果只有WINDOWS版本的本地库而没有Solaris下的本地库,它照样不能用.
turbochen 2002-06-11
  • 打赏
  • 举报
回复
使用Image类.
Image getScaledInstance(int width, int height, int hints)
建立一个缩放过的图像.
fightboy 2002-06-10
  • 打赏
  • 举报
回复
可以解释一下: 图形文件的缩放 是什么意思?
还有 java 不是和平台无关吗?为甚么 要说 在Solaris 2.8下使用的??

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧