移动端开发中微信分享图片的时候,可以说有两种方式:1. 通过imageUrl来设定一个图片的地址分享出去;2. 通过imageData将图片转换成二进制数据(可以通过 UIImageJPEGRepresentation() 或 UIImagePNGRepresentation())
)分享出去。但是有个问题可能很多人会遇到,然后以为解决了问题实际上没解决。当用户通过App分享图片时,如果在开发的时候使用第一种方式分享那么会发现,分享给朋友(Session)的时候会由于没有设置thumbImage而出现一个很丑的底图!
而分享到朋友圈(Timeline)时则一直分享不出去,即使设置了thumbImage。相比第一种方式,第二种方式则分享给朋友或分享到朋友圈都是可以成功的,但是有个问题:当你分享给朋友的时候,在没有WXMediaMessage对象设置title时,在微信中打开图片,我们可以看到分享出去的图片的后缀名是 *.dat。
于是我们给WXMediaMessage对象设置一个title,发现成功了,后缀名不再是dat了。
但是,你以为这样它就不是dat文件了吗?我们知道微信有长按图片识别二维码的功能,于是在这图片上拼命按,发现没反应。好吧,果然还是dat文件。
如果你只是想让用户分享图片,那这样做已经足够了。但是如果你想让用户能把分享出去后的图片让其他人能够长按识别二维码,那就只能另寻蹊径了。
目前我的一种解决方案是:结合上面所说的两种分享图片的方式来解决这个问题,即:分享图片给朋友的时候,我们选择分享图片的url,为了不让分享出去的图片有个难看的底图,我们可以设置一个thumbImage给WXMediaMessage对象。分享图片到朋友圈时我们选择直接分享图片,因为这时分享出去的图片就是真的图片格式,而不是dat格式的。
长按,确实成功了。以下是代码:
- (void)shareImageToWeChatWithScene:(enum WXScene)scene {
if (![WXApi isWXAppInstalled]) {
NSLog(@"没有安装微信");
return;
}
SendMessageToWXReq *message = [[SendMessageToWXReq alloc] init];
message.scene = scene;
message.bText = NO;
WXMediaMessage *mediaMessage = [WXMediaMessage message];
mediaMessage.title = @"Seed-发现不一般";
UIImage *img = [self.imageView.image resizedImageToSize:CGSizeMake(100, 100)];
[mediaMessage setThumbImage:img];
WXImageObject *imageObject = [WXImageObject object];
if (scene == WXSceneTimeline) {
imageObject.imageData = UIImageJPEGRepresentation(self.imageView.image, 1.0);
} else {
imageObject.imageUrl = imageURL;
}
mediaMessage.mediaObject = imageObject;
message.message = mediaMessage;
[WXApi sendReq:message];
}