java实现圣诞帽子头像功能

来个应景的,今天就是挨炮,不是,apple之夜了,大家的头像也开始应景了。

觉得带个小帽子挺萌的,想了想,那就自己动手写一个吧


首先准备两张图片,一张头像的,比如这张



然后准备一张圣诞帽的png图片,比如这张



因为ps实在苦手,就在网上找了素材,然后自己截取了一部分


下面是代码了,主要的思路

1. 读取原始图片input.jpg

2. 通过Graphics绘制到BufferedImage

3. 读取cover的图片cover.png

4. 通过Graphics再次绘制到BufferedImage

5. 输出到文件output.jpg


具体实现如下



			// 获取原始图片
			File img = new File("input.jpg");
			Image originImg = ImageIO.read(img);

			// 获取原始图片的宽和高
			int width = originImg.getWidth(null);
			int height = originImg.getHeight(null);
			System.out.println("原始图片的宽为:" + width + "\n原始图片的高为:" + height);

			if (width != height) {
				width = width > height ? height : width;
				height = width > height ? height : width;
			}
			System.out.println("输出图片的宽为:" + width + "\n输出图片的高为:" + height);

			// bufferimage 缓存图片,用于绘制输出的图片,输出大小与原始图片一致
			BufferedImage image = new BufferedImage(width, height,
					BufferedImage.TYPE_INT_RGB);

			Graphics g = image.createGraphics();
			// 绘制原始图片
			g.drawImage(originImg, 0, 0, width, height, null);

			/**
			 * cover.png 作为水印图片,覆盖在原始图片之上
			 */
			// 获取cover图片
			File cover = new File("cover.png");
			Image coverImg = ImageIO.read(cover);

			// 获取cover图片大小
			int widthCover = coverImg.getWidth(null);
			int heightCover = coverImg.getHeight(null);

			// 绘制水印图片,图片位置为左上角,大小与cover图片相同
			g.drawImage(coverImg, 0, 0, widthCover, heightCover, null);
			g.dispose();

			// 输出流和输出文件
			FileOutputStream out = new FileOutputStream("output.jpg");

			// 下面代码将输出图片转换为JPEG、JPG文件
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
			encoder.encode(image);
			out.close();

			System.out.println("输出文件output.jpg");



最终效果如下



原谅我不会psQAQ,简单的来说就是叠加两张图片在输出就好了,没做太多的细节处理,图片不是正方形的会直接压成正方形,但是!谁没事拿个长方形做头像啊!!!


代码有可能会出现错误,因为 JPEGCodec 和 JPEGImageEncoder 是受限访问的,需要自己手动修改


修改方式:

1. 右键项目propertites

2. Java Complier

3. Errors/Warning

4. Enable project specified settings

5. 修改depracated and restricked API

6. 修改Forbidden reference warnning

7. 代码里添加 @SuppressWarnings("restriction") 元注释去除警告

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值