// 用到的包 import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.InputStream; import java.net.URL; import java.util.Date;
public static void main(String[] args) { try { String serverUploadImgUrl = "/Users/biusun/Desktop/"; // 图片保存路径 // 背景图片 (注:此图片来源于网络) String backImgUrlStr = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1587644051898&di=54814ecdba4457113823e78af9d55682&imgtype=0&src=http%3A%2F%2Fpic.90sjimg.com%2Fdesign%2F01%2F45%2F68%2F00%2F5901fb923c111.png"; InputStream backImgUrl = new URL(backImgUrlStr).openStream(); BufferedImage backImg = ImageIO.read(backImgUrl); // 要合并的图片 (注:此图片来源于网络) String imgUrlStr = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1587644124018&di=fbd350136cf6cd21f985f89e1ecda7d8&imgtype=0&src=http%3A%2F%2Fimgs.shougongke.com%2FPublic%2Fdata%2Fhand%2F201507%2F08%2Fstep%2F38%2F1436341208928.jpg"; InputStream imgUrl = new URL(imgUrlStr).openStream(); BufferedImage img = ImageIO.read(imgUrl); int backImgNewWidth = backImg.getWidth();// 背景图片宽度 int backImgNewHeight = backImg.getHeight();// 背景图片高度度 // 生成新的合并的图片(调整图片的大小) int imgNewWidth = backImgNewWidth / 3; // BufferedImage imgNew = new BufferedImage(图片宽度, 图片高度, 图像类型); BufferedImage imgNew = new BufferedImage(imgNewWidth, imgNewWidth, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = imgNew.createGraphics(); g2d.drawImage(img, 0, 0, imgNew.getWidth(), imgNew.getHeight(), null); g2d.dispose(); // 两图片合并 int imgNewWidthPosition = (backImgNewWidth - imgNewWidth) / 2; int imgNewHeightPosition = (backImgNewHeight - imgNewWidth) / 2; Graphics g = backImg.getGraphics(); // backImg(注意 // g.drawImage(图片, x 位置, y 位置, null); g.drawImage(imgNew, imgNewWidthPosition, imgNewHeightPosition, null); //把 imgNew,整合在 backImg 里面 // g.dispose(); //最后一个参数用来设置字体的大小(文字放在 liunx,可能会乱码,那是因为服务器上没有这个字体,要上传,自行百度) Font fTxtBottom = new Font("微软雅黑", Font.PLAIN, 30); Color myColorTxtBottom = Color.BLACK; //图片颜色 g.setColor(myColorTxtBottom); g.setFont(fTxtBottom); // g.drawString(文字, x 位置, y 位置); g.drawString("陌生人,您好!", backImgNewWidth / 2, backImgNewHeight / 5); // 第二段文字 (图片也可以多张) // Font fTxtBottom = new Font("微软雅黑", Font.PLAIN, 30); // Color myColorTxtBottom = Color.BLACK; //图片颜色 // g.setColor(myColorTxtBottom); // g.setFont(fTxtBottom); //// g.drawString(文字, x 位置, y 位置); // g.drawString("陌生人,您好!", backImgNewWidth / 2, backImgNewHeight / 3); g.dispose(); //调这个方法就是开始这个整合 (可以多张图片,多个文字整合成一张图片,只有把他们放在这方法里面就行) String imgName = new Date().getTime() + ".jpg"; //生成的图片名称 File newFile = new File(serverUploadImgUrl, imgName); //生成新的图片 // 此处要写PNG否则可能会出现遮罩层 ImageIO.write(backImg, "png", newFile); } catch (Exception e) { e.printStackTrace(); } System.out.println("结束"); }