我们生成二维码以后,需要的就是把原来海报最为背景图,在固定的地方把二维码换掉。
public static void exportImg2(File phone,File headImg,File imgs){
try {
//1.jpg是你的 主图片的路径
InputStream is = new FileInputStream(imgs);
//通过JPEG图象流创建JPEG数据流解码器
JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(is);
//解码当前JPEG数据流,返回BufferedImage对象
BufferedImage buffImg = jpegDecoder.decodeAsBufferedImage();
//得到画笔对象
Graphics g = buffImg.getGraphics();
//创建你要附加的图象。
//小图片的路径
ImageIcon imgIcon = new ImageIcon(headImg.getPath());
//得到Image对象。
Image img = imgIcon.getImage();
//将小图片绘到大图片上。
//5,300 .表示你的小图片在大图片上的位置。
g.drawImage(img,400,800,null);
// g.drawImage(img,400,440,null);
//设置颜色。
g.setColor(Color.BLACK);
//最后一个参数用来设置字体的大小,这是用来在海报上面写上字的方法
/* Font f = new Font("宋体",Font.PLAIN,30);
Color mycolor = Color.white;//new Color(0, 0, 255);
g.setColor(mycolor);
g.setFont(f);*/
//10,20 表示这段文字在图片上的位置(x,y) .第一个是你设置的内容。
// g.drawString(username,180,894);
//创建你要附加的图象。
//小图片的路径
ImageIcon imgIconPhone = new ImageIcon(phone.getPath());
//得到Image对象。
Image imgPhone = imgIconPhone.getImage();
//将小图片绘到大图片上。
//5,300 .表示你的小图片在大图片上的位置。
g.drawImage(imgPhone,172,866,null);
// g.drawImage(img,400,440,null);
//设置颜色。
g.setColor(Color.BLACK);
g.dispose();
OutputStream os;
os = new FileOutputStream(imgs);
// String shareFileName = "\\upload\\" + System.currentTimeMillis() + ".jpg";
// os = new FileOutputStream(shareFileName);
//创键编码器,用于编码内存中的图象数据。
JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);
en.encode(buffImg);
is.close();
os.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ImageFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
可以根据海报大小的不同和二维码的不同,来调节位置方向。
我实现的方法是将原海报背景放在服务器上,然后根据不同的信息源,生成不同的二维码,每次请求不同,然后替换掉原来位置的二维码就好了。
既然要在微信端展示给客户,那么肯定要上传到微信的服务器上的。
String qrcodename = new Date().getTime()+"";
QRCode test = new QRCode();
String filePostfix="jpg";
File file = new File("/root/u1/"+qrcodename+"."+filePostfix);
file.createNewFile();
File file2 = new File("/root/u1/1.jpg");
//生成二维码的方法
//数据库创建了一个类,用来保存
Qrcode qrcode = new Qrcode();return 将图片转成xml;
public static JSONObject uploadMedia(File file, String token, String type) {
if(file==null||token==null||type==null){
return null;
}
if(!file.exists()){
System.out.println("上传文件不存在,请检查!");
return null;
}
String url = "https://api.weixin.qq.com/cgi-bin/material/add_material";
JSONObject jsonObject = null;
PostMethod post = new PostMethod(url);
post.setRequestHeader("Connection", "Keep-Alive");
post.setRequestHeader("Cache-Control", "no-cache");
FilePart media = null;
HttpClient httpClient = new HttpClient();
//信任任何类型的证书
/*Protocol myhttps = new Protocol("https", new MySSLProtocolSocketFactory(), 443);
Protocol.registerProtocol("https", myhttps);*/
try {
media = new FilePart("media", file);
Part[] parts = new Part[] { new StringPart("access_token", token),
new StringPart("type", type), media };
MultipartRequestEntity entity = new MultipartRequestEntity(parts,
post.getParams());
post.setRequestEntity(entity);
int status = httpClient.executeMethod(post);
if (status == HttpStatus.SC_OK) {
String text = post.getResponseBodyAsString();
System.out.println(text+"-------------------");
jsonObject = JSONObject.parseObject(text);
} else {
System.out.println("upload Media failure status is:" + status);
}
} catch (FileNotFoundException execption) {
execption.printStackTrace();
} catch (HttpException execption) {
execption.printStackTrace();
} catch (IOException execption) {
execption.printStackTrace();
}
return jsonObject;
}