Image tool, image watermark, text watermark, zoom, fill white, etc.
Import java. awt. alphaComposite; import java. awt. color; import java. awt. font; import java. awt. graphics2D; import java. awt. image; import java. awt. geom. affineTransform; import java. awt. image. affineTransformOp; import java. awt. image. bufferedImage; import java. io. file; import java. io. IOException; import javax. imageio. imageIO;/*** image tool class, image watermark, text watermark, zoom, fill white, etc. */public final class ImageUtils {/** image format: JPG */ Private static final String PICTRUE_FORMATE_JPG = "jpg"; private ImageUtils () {}/*** add image watermark * @ param targetImg target image path, for example: C: // myPictrue // 1.jpg * @ param waterImg watermark image path, for example, C: // myPictrue // logo.png * @ param x watermark image offset from the left side of the target image, if x is <0, the offset between the x @ param y watermark image and the top side of the target image is in the middle. If y is <0, then in the middle of the line * @ param alpha transparency (0.0 -- 1.0, 0.0 is completely transparent, 1.0 is completely opaque) */public final static void pressImage (String targetImg, String waterImg, Int x, int y, float alpha) {try {File file = new File (targetImg); Image image = ImageIO. read (file); int width = image. getWidth (null); int height = image. getHeight (null); BufferedImage bufferedImage = new BufferedImage (width, height, BufferedImage. TYPE_INT_RGB); Graphics2D g = bufferedImage. createGraphics (); g. drawImage (image, 0, 0, width, height, null); Image waterImage = ImageIO. read (new File (WaterImg); // watermark file int width_1 = waterImage. getWidth (null); int height_1 = waterImage. getHeight (null); g. setComposite (AlphaComposite. getInstance (AlphaComposite. SRC_ATOP, alpha); int widthDiff = width-width_1; int heightDiff = height-height_1; if (x <0) {x = widthDiff/2 ;} else if (x> widthDiff) {x = widthDiff;} if (y <0) {y = heightDiff/2;} else if (y> heightDiff) {y = heightDiff ;} g. dr AwImage (waterImage, x, y, width_1, height_1, null); // end of the watermark file g. dispose (); ImageIO. write (bufferedImage, PICTRUE_FORMATE_JPG, file);} catch (IOException e) {e. printStackTrace () ;}/ *** Add a text watermark * @ param targetImg target image path, for example, C: // myPictrue // 1.jpg * @ param pressText watermark text, for example: china Securities Network * @ param fontName Font name, such as: * @ param fontStyle Font style, such as: bold and italic (Font. BOLD | Font. ITALIC) * @ param fontSize font size, in pixels * @ param Color font color * @ param x the offset between the watermark text and the left side of the target image. If x is <0, the offset between the watermark text and the top side of the target image * @ param y, if y is <0, the * @ param alpha transparency (0.0 -- 1.0, 0.0 is completely transparent, 1.0 is completely opaque) */public static void pressText (String targetImg, string pressText, String fontName, int fontStyle, int fontSize, Color color, int x, int y, float alpha) {try {File file = new File (targetImg ); image image = ImageIO. read (file); int width = image. getWidth (Null); int height = image. getHeight (null); BufferedImage bufferedImage = new BufferedImage (width, height, BufferedImage. TYPE_INT_RGB); Graphics2D g = bufferedImage. createGraphics (); g. drawImage (image, 0, 0, width, height, null); g. setFont (new Font (fontName, fontStyle, fontSize); g. setColor (color); g. setComposite (AlphaComposite. getInstance (AlphaComposite. SRC_ATOP, alpha); int width_1 = fontSize * GetLength (pressText); int height_1 = fontSize; int widthDiff = width-width_1; int heightDiff = height-height_1; if (x <0) {x = widthDiff/2 ;} else if (x> widthDiff) {x = widthDiff;} if (y <0) {y = heightDiff/2;} else if (y> heightDiff) {y = heightDiff ;} g. drawString (pressText, x, y + height_1); g. dispose (); ImageIO. write (bufferedImage, PICTRUE_FORMATE_JPG, file);} catch (Exception e ){ E. printStackTrace () ;}}/*** get the length of a character. One Chinese character serves as one character, and one English letter serves as 0.5 characters * @ param text * @ return, for example: text = "China", returns 2; text = "test", returns 2; text = "China ABC", returns 4. */public static int getLength (String text) {int textLength = text. length (); int length = textLength; for (int I = 0; I <textLength; I ++) {if (String. valueOf (text. charAt (I )). getBytes (). length> 1) {length ++;} return (length % 2 = 0 )? Length/2: length/2 + 1 ;} /*** image scaling ** @ param filePath image path * @ param height * @ param width * @ param bb ratio incorrect? */public static void resize (String filePath, int height, int width, boolean bb) {try {double ratio = 0; // zoom ratio File f = new File (filePath); BufferedImage bi = ImageIO. read (f); Image itemp = bi. getScaledInstance (width, height, BufferedImage. SCALE_SMOOTH); // calculate the ratio if (bi. g EtHeight ()> height) | (bi. getWidth ()> width) {if (bi. getHeight ()> bi. getWidth () {ratio = (new Integer (height )). doubleValue ()/bi. getHeight ();} else {ratio = (new Integer (width )). doubleValue ()/bi. getWidth ();} AffineTransformOp op = new AffineTransformOp (AffineTransform. getScaleInstance (ratio, ratio), null); itemp = op. filter (bi, null);} if (bb) {BufferedImage image = new BufferedIma Ge (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. getHe Ight (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 {// Add a text watermark // pressText ("D:/1.jpg"," test ", "", Font. BOLD, 24, Color. red, 50, 50, 0.3f); // resize the image ("D:/1.jpg", 100,600, false); System. out. println ("processed! ");}}