改变图片的大小,并且给图片设置白色背景



/**
* 改变图片的大小
*
* @param source
* 源文件
* @param targetW
* 目标长
* @param targetH
* 目标宽
* @return
* @throws IOException
*/
public static BufferedImage resize(BufferedImage source, int targetW, int targetH) throws IOException
{
int type = source.getType();
BufferedImage target = null;
double sx = (double) targetW / source.getWidth();
double sy = (double) targetH / source.getHeight();
// 这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放
// 则将下面的if else语句注释即可
if (sx > sy)
{
sx = sy;
targetW = (int) (sx * source.getWidth());
}
else
{
sy = sx;
targetH = (int) (sy * source.getHeight());
}
if (type == BufferedImage.TYPE_CUSTOM)
{ // handmade
ColorModel cm = source.getColorModel();
WritableRaster raster = cm.createCompatibleWritableRaster(targetW,
targetH);
boolean alphaPremultiplied = cm.isAlphaPremultiplied();
target = new BufferedImage(cm, raster, alphaPremultiplied, null);
}
else
{
//固定宽高,宽高一定要比原图片大
//target = new BufferedImage(targetW, targetH, type);
target = new BufferedImage(800, 600, type);
}

Graphics2D g = target.createGraphics();

//写入背景
g.drawImage(ImageIO.read(new File("ok/blank.png")), 0, 0, null);

// smoother than exlax:
g.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
g.dispose();
return target;
}


public static void main(String[] args) throws IOException
{
ImgUtil iu = new ImgUtil();

BufferedImage image = ImageIO.read(new File("ok/1111661748321.jpg"));
image = iu.resize(image, 512, 512);

ImageIO.write(image, "png", new FileOutputStream("ok/test.JPG"));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值