请教如何对图片进行缩放?

bbchen 2004-01-21 06:01:10
请教各位大哥,我如何读入一个图片,然后
对这图片进行操作。例如缩放等操作呢?
...全文
158 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bbchen 2004-01-23
  • 打赏
  • 举报
回复
up
bbchen 2004-01-23
  • 打赏
  • 举报
回复
不会吧??…………那么photoshop为什么能处理得如何
圆滑的呢?java的2d库里面应该有相应方法吧,只是偶
不懂啊………………
yueyingcs 2004-01-23
  • 打赏
  • 举报
回复
位图都会有锯齿感的吧,
放大了都会变的。
失量图就不会变了。。。
hfree 2004-01-22
  • 打赏
  • 举报
回复
up
bbchen 2004-01-22
  • 打赏
  • 举报
回复
我顶~~
mattus_zhao 2004-01-22
  • 打赏
  • 举报
回复
其实关键的问题在于缩放时你所采用的插值算法:
o 线性插值
o 双线性插值
o 样条曲线插值
使用的插值算法从上往下,质量越好,速度越慢。
建议你参考一些数字图像处理的书籍。
longbaduo 2004-01-22
  • 打赏
  • 举报
回复
mark
mattus_zhao 2004-01-22
  • 打赏
  • 举报
回复
我说的其实是一些数字图像处理方面的理论知识,具体到实现上面,其实 J2sdk 里面的
BufferedImage 类已经实现了相关的内容:
比如三个插值算法,还有在图形绘制时候的反走样,就象你上面所用的 setRenderingHints方法。
如果你对 Java 2D 有兴趣的话,可以参考 J2SDK 的文档,上面有一节专门讲述 Java 2D API 的。
bbchen 2004-01-22
  • 打赏
  • 举报
回复
那请教大哥究竟应该如何去做呢?
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(人生十有八九不如意) 兄说的方法,
小弟完全不会。能否举个例子呢?例如就在这个
程序里面,如果我要抗锯齿,输出的图片效果好点,
我可以怎么做,程序应该怎么写呢?

今天是大年初一,小弟恭祝各位大哥新年快乐,身体
健康,恭喜发财!!恭喜恭喜!
wobelisk 2004-01-22
  • 打赏
  • 举报
回复
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 cast

jpg is a losing format. to improve quality, you can use .png format.
another thing is ImageIo.write doesn't support .gif
bbchen 2004-01-22
  • 打赏
  • 举报
回复
up
bbchen 2004-01-22
  • 打赏
  • 举报
回复
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);
}
}

wobelisk 2004-01-22
  • 打赏
  • 举报
回复
Graphics2D.scale(2.0,2.0); or

AffineTransform trans=AffineTransform.setToScale(2.0,2.0);
g2d.drawImage(img,trans,this);
icebound1 2004-01-22
  • 打赏
  • 举报
回复
mark

62,614

社区成员

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

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