g2d.drawImage(img,trans,this); 如果非面版显示呢?请大哥指教。 小弟的原代码,大小的问题解决了,但是, 缩少图片后,质量好差,不知道应该如何 才可以抗失真。希望各位大哥能够赐教。 小弟在这里谢谢各位了。import javax.imageio.*; import java.io.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; import java.awt.Image; import java.awt.image.AffineTransformOp; import java.awt.geom.AffineTransform;public class javaJPG { public static void main(String args[]) throws IOException { double Ratio=0.0; String name = "http://www.google.com/intl/zh-CN_ALL/images/logo.gif"; URL filestring = new URL(name); BufferedImage Bi = ImageIO.read(filestring); Image Itemp = Bi.getScaledInstance(200, 200, Bi.SCALE_SMOOTH); if ( (Bi.getHeight() > 200) || (Bi.getWidth() > 200)) { if (Bi.getHeight() > Bi.getWidth()) { Ratio = 200.0 / Bi.getHeight(); } else { Ratio = 200.0 / Bi.getWidth(); } } AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(Ratio, Ratio), null); Itemp = op.filter(Bi, null); String formatName = "jpg"; String outputFilename = "c:/name" + "." + formatName; File outputFile = new File(outputFilename); boolean writerExists = ImageIO.write((BufferedImage)Itemp, formatName, outputFile); } }
double Ratio=1.0; ... BufferedImage Itemp; // Because you use AffineTransformOp to do transform // Image Itemp = Bi.getScaledInstance(200, 200, Bi.SCALE_SMOOTH); ImageIO.write(Itemp, formatName, outputFile); //no castjpg is a losing format. to improve quality, you can use .png format. another thing is ImageIo.write doesn't support .gif
其实关键的问题在于缩放时你所采用的插值算法: o 线性插值 o 双线性插值 o 样条曲线插值 使用的插值算法从上往下,质量越好,速度越慢。 建议你参考一些数字图像处理的书籍。
如果非面版显示呢?请大哥指教。
小弟的原代码,大小的问题解决了,但是,
缩少图片后,质量好差,不知道应该如何
才可以抗失真。希望各位大哥能够赐教。
小弟在这里谢谢各位了。import javax.imageio.*;
import java.io.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.awt.Image;
import java.awt.image.AffineTransformOp;
import java.awt.geom.AffineTransform;public class javaJPG { public static void main(String args[]) throws IOException {
double Ratio=0.0;
String name = "http://www.google.com/intl/zh-CN_ALL/images/logo.gif";
URL filestring = new URL(name);
BufferedImage Bi = ImageIO.read(filestring);
Image Itemp = Bi.getScaledInstance(200, 200, Bi.SCALE_SMOOTH);
if ( (Bi.getHeight() > 200) || (Bi.getWidth() > 200)) {
if (Bi.getHeight() > Bi.getWidth()) {
Ratio = 200.0 / Bi.getHeight();
}
else {
Ratio = 200.0 / Bi.getWidth();
}
} AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(Ratio, Ratio), null);
Itemp = op.filter(Bi, null);
String formatName = "jpg";
String outputFilename = "c:/name" + "." + formatName;
File outputFile = new File(outputFilename);
boolean writerExists = ImageIO.write((BufferedImage)Itemp, formatName, outputFile);
}
}
...
BufferedImage Itemp;
// Because you use AffineTransformOp to do transform
// Image Itemp = Bi.getScaledInstance(200, 200, Bi.SCALE_SMOOTH);
ImageIO.write(Itemp, formatName, outputFile); //no castjpg is a losing format. to improve quality, you can use .png format.
another thing is ImageIo.write doesn't support .gif
o 线性插值
o 双线性插值
o 样条曲线插值
使用的插值算法从上往下,质量越好,速度越慢。
建议你参考一些数字图像处理的书籍。
ImageIO不支持gif是写出不是读入。import javax.imageio.*;
public class ShowImageIOInfo
{
public ShowImageIOInfo() {
String names[] = ImageIO.getReaderFormatNames();
for (int i=0; i<names.length; ++i) {
System.out.println( "reader "+names[i] );
}
names = ImageIO.getWriterFormatNames();
for (int i=0; i<names.length; ++i) {
System.out.println( "writer "+names[i] );
}
}
static public void main( String args[] ) throws Exception {
new ShowImageIOInfo();
}
}可以输出支持的格式。
输出结果为:reader png
reader jpeg
reader JPEG
reader gif
reader jpg
reader JPG
writer PNG
writer png
writer jpeg
writer JPEG
writer jpg
writer JPG而且经过测试,缩放后,一张6K的jpg和
一张60K的png质量好像也差不了多少。
请问如何抗锯齿的呢?op.setRenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);好像是不行的。小弟非常希望各位大哥能够帮忙。mattus_zhao(人生十有八九不如意) 兄说的方法,
小弟完全不会。能否举个例子呢?例如就在这个
程序里面,如果我要抗锯齿,输出的图片效果好点,
我可以怎么做,程序应该怎么写呢?今天是大年初一,小弟恭祝各位大哥新年快乐,身体
健康,恭喜发财!!恭喜恭喜!
BufferedImage 类已经实现了相关的内容:
比如三个插值算法,还有在图形绘制时候的反走样,就象你上面所用的 setRenderingHints方法。
如果你对 Java 2D 有兴趣的话,可以参考 J2SDK 的文档,上面有一节专门讲述 Java 2D API 的。
圆滑的呢?java的2d库里面应该有相应方法吧,只是偶
不懂啊………………