java 图片加白压缩_java图片文字水印、图片水印、缩放、补白处理

importjava.awt.AlphaComposite;

importjava.awt.Color;

importjava.awt.Font;

importjava.awt.Graphics2D;

importjava.awt.Image;

importjava.awt.geom.AffineTransform;

importjava.awt.image.AffineTransformOp;

importjava.awt.image.BufferedImage;

importjava.io.File;

importjava.io.IOException;

importjavax.imageio.ImageIO;

public final classImageUtils {

/**

* 图片水印

*

* @param pressImg

*            水印图片

* @param targetImg

*            目标图片

* @param x

*            修正值 默认在中

* @param y

*            修正值 默认在中

* @param alpha

*            透明度

*/

public final static void pressImage(String pressImg, String targetImg, int x, int y, float alpha) {

try{

File img = new File(targetImg);

Image src = ImageIO.read(img);

int wideth = src.getWidth(null);

int height = src.getHeight(null);

BufferedImage image = newBufferedImage(wideth, height, BufferedImage.TYPE_INT_RGB);

Graphics2D g = image.createGraphics();

g.drawImage(src, 0, 0, wideth, height, null);

// 水印

文件

Image src_biao = ImageIO.read(new File(pressImg));

int wideth_biao = src_biao.getWidth(null);

int height_biao = src_biao.getHeight(null);

g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));

g.drawImage(src_biao, (wideth - wideth_biao) / 2, (height - height_biao) / 2, wideth_biao, height_biao, null);

// 水印

文件结束

g.dispose();

ImageIO.write((BufferedImage) image, "jpg", img);

} catch(Exception e) {

e.printStackTrace();

}

}

/**

* 文字水印

*

* @param pressText

*            水印文字

* @param targetImg

*            目标图片

* @param fontName

*            字体名称

* @param fontStyle

*            字体样式

* @param color

*            字体颜色

* @param fontSize

*            字体大小

* @param x

*            修正值

* @param y

*            修正值

* @param alpha

*            透明度

*/

public static void pressText(String pressText, String targetImg, String fontName, int fontStyle, Color color, int fontSize, int x, int y, floatalpha) {

try{

File img = new File(targetImg);

Image src = ImageIO.read(img);

int width = src.getWidth(null);

int height = src.getHeight(null);

BufferedImage image = newBufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics2D g = image.createGraphics();

g.drawImage(src, 0, 0, width, height, null);

g.setColor(color);

g.setFont(newFont(fontName, fontStyle, fontSize));

g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));

g.drawString(pressText, (width - (getLength(pressText) * fontSize)) / 2 + x, (height - fontSize) / 2 + y);

g.dispose();

ImageIO.write((BufferedImage) image, "jpg", img);

} catch(Exception e) {

e.printStackTrace();

}

}

/**

* 缩放

*

* @param filePath

*            图片路径

* @param height

*            高度

* @param width

*            宽度

* @param bb

*            比例不对时是

否需要补白

*/

public static void resize(String filePath, int height, int width, boolean bb) {

try{

double ratio = 0; // 缩放比例

File f = newFile(filePath);

BufferedImage bi = ImageIO.read(f);

Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);

// 计算

比例

if((bi.getHeight() > height) || (bi.getWidth() > width)) {

if(bi.getHeight() > bi.getWidth()) {

ratio = (newInteger(height)).doubleValue() / bi.getHeight();

} else{

ratio = (newInteger(width)).doubleValue() / bi.getWidth();

}

AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);

itemp = op.filter(bi, null);

}

if(bb) {

BufferedImage image = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

Graphics2D g = image.createGraphics();

g.setColor(Color.white);

g.fillRect(0, 0, width, height);

if (width == itemp.getWidth(null))

g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);

else

g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);

g.dispose();

itemp = image;

}

ImageIO.write((BufferedImage) itemp, "jpg", f);

} catch(IOException e) {

e.printStackTrace();

}

}

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

pressImage("G:""imgtest""sy.jpg", "G:""imgtest""testjpg", 0, 0, 5f);

pressText("我是

文字水印", "G:""imgtest""testjpg", "黑体", 36, Color.white, 80,

0, 0, 3f);

resize("G:""imgtest""testjpg", 500, 500, true);

}

public static intgetLength(String text) {

int length = 0;

for (int i = 0; i 

if (new String(text.charAt(i) + "").getBytes().length > 1) {

length += 2;

} else{

length += 1;

}

}

return length / 2;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值