哪位知道如何用JAVA进行图形文件的缩放? 是使用JAVA2D 或是有第三方的软件? 可以解释一下: 图形文件的缩放 是什么意思?还有 java 不是和平台无关吗?为甚么 要说 在Solaris 2.8下使用的?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是这样的,假设我有一个800*600的图象文件,而我现在要把它们缩小到200*100尺寸, 就是这样.至于为什么说根在Solaris 2.8下使用是因为有的JAVA工具是使用了本地库技术的,如果只有WINDOWS版本的本地库而没有Solaris下的本地库,它照样不能用. 使用Image类. Image getScaledInstance(int width, int height, int hints) 建立一个缩放过的图像. 建立了Image对象后如何再将它按指定格式写入文件呢? 对于jdk1。3http://java.sun.com/products/java-media/jai/forDevelopers/jai1_0_1guide-unc/Encode.doc.html对于jdk1。4http://java.sun.com/j2se/1.4/docs/guide/imageio/spec/apps.fm4.html我还没试出来,结果出来了可否给告知一下!(注意写了文件要flush并close) 非常感谢几位对我的帮助,此问题已经解决,现将解决方案列出,希望对各位有用:================================================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则需要安装对应的包.各位可以做为参考. Socket编程中输出流问题 可运行的jar包 什么是对象间的循环引用和自身引用? 用java如何打开 关于java中类的(=)操作的编写的问题 高手救命啊(图形的Java应用程序无法启动,控制台程序可以) 一些小问题 刚学java请大家帮助 线程简单问题 java有没有像类似c++ 的MFC之类的开发书啊.?? 高手请教!为什么我的输入同输出的不一致!! scjp问题请教。 菜鸟手记-----学习java第一天
至于为什么说根在Solaris 2.8下使用是因为有的JAVA工具是使用了本地库技术的,如果只有WINDOWS版本的本地库而没有Solaris下的本地库,它照样不能用.
Image getScaledInstance(int width, int height, int hints)
建立一个缩放过的图像.
(注意写了文件要flush并close)
================================================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则需要安装对应的包.各位可以做为参考.