使用java处理图形文件的问题

bluemouse 2003-12-19 10:04:18
请问高手,如何使用java将一个任意大小的图片等比例缩减至至少其中一边等于一固定数值(如100),我曾经用.net实现过,现在程序要用java改写,不知道java中如何实现。

先谢谢了 :)
...全文
81 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wobelisk 2003-12-19
graphics2D.scale
  • 打赏
  • 举报
回复
bluemouse 2003-12-19
参照网上的例子,自己解决了,实现见下 :
有同样需要的朋友可以参考调用 :)

import java.io.File;
import java.io.IOException;
import java.awt.image.BufferedImage;
import java.awt.Image;
import java.awt.image.AffineTransformOp;
import javax.imageio.ImageIO;
import java.awt.geom.AffineTransform;


public class imgTest
{

public static void main(String args[]) throws Exception
{

CreateThumbnail();
System.in.read();


}

public static boolean CreateThumbnail() throws Exception
{
String tofile = "d:\\b";
String imgfile = "d:\\a.jpg";
// ext是图片的格式 gif JPG 或png
String ext="";
double Ratio=0.0;
File F = new File(imgfile);
if (!F.isFile())
throw new Exception(F+" is not image file error in CreateThumbnail!");

// 首先判断上传的图片是gif还是JPG ImageIO只能将gif转换为png
if (isJpg(imgfile)){
ext="jpg";
}else{
ext="png";
}
File ThF = new File(tofile+"."+ext);


BufferedImage Bi = ImageIO.read(F);
// 假设图片宽 高 最大为120 120
Image Itemp = Bi.getScaledInstance (120,120,Image.SCALE_SMOOTH);


if ((Bi.getHeight()>100) || (Bi.getWidth()>100)){
if (Bi.getHeight()>Bi.getWidth())
Ratio = 100.0/Bi.getHeight();
else
Ratio = 100.0/Bi.getWidth();
}


AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(Ratio, Ratio), null);
Itemp = op.filter(Bi, null);

try {
ImageIO.write((BufferedImage)Itemp, ext, ThF);
}catch (Exception ex) {
throw new Exception(" ImageIo.write error in CreatThum.: "+ex.getMessage());
}
return (true);
}

/**
* @param imgfile
* @return
*/
private static boolean isJpg(String _s)
{
String _ext;
_ext=_s.substring(_s.indexOf(".")+1,_s.length()).toLowerCase();
if (_ext.equals("jpg"))
{
return true;
}
return false;
}




}
  • 打赏
  • 举报
回复
cql0007 2003-12-19
这些计算应该要你自己去计算得出一个公式的吧,没必要要用到什么特殊的具体的类吧.
JAVA里好象没有这样的类.

其实这和别的语言实现这个功能是一样的啊,首先把图的尺寸算好,然后画出来就行了.
画图的方法:
g.drawImage(image,x,y,width,height,this)
image为该图,x,y为该图开始绘画的起始坐标,width和height为画出该图的宽和高(你的大小控制就在这里了)
  • 打赏
  • 举报
回复
bluemouse 2003-12-19
up一下
  • 打赏
  • 举报
回复
bluemouse 2003-12-19
算比例这个我明白,我想知道具体应该用到java的哪个类?能否说一下思路呢?
  • 打赏
  • 举报
回复
cql0007 2003-12-19
一缩放后其中一边就变成100这样的?

例如图片本来是宽500,高400的.
如果是把500的边变成100,算出它的缩放比例,scaleX=500/100,则高为400/scaleX就是了.
  • 打赏
  • 举报
回复
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
社区管理员
  • Java SE
申请成为版主
帖子事件
创建了帖子
2003-12-19 10:04
社区公告
暂无公告