海報(bào)上添加帶頭像的二維碼

開發(fā)語(yǔ)言:這里使用的是java

具體思路:這個(gè)大家應(yīng)該都知道,先把頭像放到二維碼上,生成帶頭像的二維碼圖片,然后再把帶頭像的二維碼圖片添加到海報(bào)圖片上

具體代碼實(shí)現(xiàn)如下:(效果如何需要自己親自實(shí)踐啦)

import javax.imageio.IIOImage;

import javax.imageio.ImageIO;

import javax.imageio.ImageWriteParam;

import javax.imageio.ImageWriter;

import javax.imageio.stream.ImageOutputStream;

import java.awt.*;

import java.awt.color.ColorSpace;

import java.awt.image.BufferedImage;

import java.awt.image.ColorConvertOp;

import java.io.*;

import java.net.URL;

public class AddPic {

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

String userPath ="頭像的url";

String qrcodeImg ="二維碼的url";

String posterPath ="海報(bào)url";

BufferedImage qrcodeImage1 = ImageIO.read(new URL(qrcodeImg));

//獲取海報(bào)圖片

? ? ? ? BufferedImage posterImage = ImageIO.read(new URL(posterPath));

Graphics posterGrap = posterImage.getGraphics();

BufferedImage userImage = ImageIO.read(new URL(userPath));

System.out.println("Add icon to the qrcode!");

String headImgPath ="xxxxxxxxxxxxxxxxxxxxxxxxx";

? ? ? ? BufferedImage qrcodeImage =new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_sRGB),null).filter(qrcodeImage1,null);

Graphics qrcodeGrap = qrcodeImage.getGraphics();

qrcodeGrap.drawImage(userImage, qrcodeImage.getWidth()/8*3, qrcodeImage.getHeight()/8*3, qrcodeImage.getWidth()/4, qrcodeImage.getHeight()/4,null);

File qrcodeFile =new File(headImgPath);

ImageIO.write(qrcodeImage,"PNG", qrcodeFile);

InputStream imagein =new FileInputStream(headImgPath);

BufferedImage headQrcodeImage = ImageIO.read(imagein);

posterGrap.drawImage(headQrcodeImage,0,0, Integer.parseInt("100"), Integer.parseInt("100"),null);

String finalPosterPath ="合成的圖片";

File posterFile =new File(finalPosterPath);

OutputStream out =new FileOutputStream(posterFile);

ImageWriter writer =? ImageIO.getImageWritersByFormatName("jpg").next();

ImageOutputStream ios = ImageIO.createImageOutputStream(out);

writer.setOutput(ios);

ImageWriteParam param = writer.getDefaultWriteParam();

if (param.canWriteCompressed()){

param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);

param.setCompressionQuality(0.2f);

}

writer.write(null,new IIOImage(posterImage,null,null), param);

out.close();

ios.close();

writer.dispose();

}

}

需要注意的問(wèn)題:

1、圖片的色彩空間,例如微信生成的二維碼默認(rèn)的色彩空間是什么,因?yàn)槲覀兿M深^像二維碼上是彩色的頭像,對(duì)吧

2、生成的圖片太大,不利于傳輸,那么就要考慮圖片壓縮

3、一張圖片添加到另一張圖片上時(shí),位置的設(shè)置

4、圖片合成的執(zhí)行速度相對(duì)較慢,要用專門的線程處理

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,593評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,734評(píng)論 18 399
  • 字符串有整型的相互轉(zhuǎn)換 向文件末尾添加內(nèi)容 得到當(dāng)前方法的名字 轉(zhuǎn)字符串到日期 或者是: 使用JDBC鏈接Orac...
    jasonlu1208閱讀 248評(píng)論 0 3
  • Good morning siri。這是我每天早上睜開眼對(duì)siri說(shuō)的話,然后滿懷期待的等著她那句mornin...
    滄浪之水_揚(yáng)州閱讀 737評(píng)論 1 1
  • 相信很多人對(duì)于理財(cái)?shù)母拍畈⒉荒吧?,理?cái)產(chǎn)品種類很多,但是,許多人還是選擇了股市。 股市是一個(gè)平靜中醞釀...
    李中民nn閱讀 524評(píng)論 0 2

友情鏈接更多精彩內(nèi)容