java实现圣诞帽子头像功能

来源:互联网 发布:淘宝浏览需要登录 编辑:程序博客网 时间:2024/04/29 21:29

来个应景的,今天就是挨炮,不是,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 0