前言

微信分享到朋友圈,可分享的类型有:文字类型、图片类型、音乐类型、视频类型和网页类型,但是我们在做图片分享的时候发现微信给的API只能分享一张图片,达不到一些APP的需求,而产品汪或者Boss想要分享多张图片,比如前段时间我做的一个APP,是电商类APP,想把商品的图片都分享到朋友圈,查看微信的API根本没有提供API,在这里我们只能用iOS系统自带的分享了。

UIActivityViewController

UIActivityViewController是在iOS 6开始支持的,同样是不能在Apple TV的开发中使用。而且UIActivityViewController是直接继承UIViewController的,这意味着我们需要自己来展示和解散视图。

主要代码

OC代码

  1. <span style="font-size:18px;">UIImage *imageToShare = [UIImage imageNamed:@"99687078.jpg"];
  2. UIImage *imageToShare1 = [UIImage imageNamed:@"2222.jpg"];
  3. NSArray *activityItems = @[imageToShare,imageToShare1];
  4. UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];
  5. [self presentViewController:activityVC animated:TRUE completion:nil];</span>

swift代码

  1. <span style="font-size:18px;">let imageToShare1 = UIImage.init(named: "99687078.jpg")
  2. let imageToShare2 = UIImage.init(named: "2222.jpg")
  3. let activityItems = [imageToShare1,imageToShare2]
  4. let activityVC = UIActivityViewController.init(activityItems: activityItems, applicationActivities: nil)
  5. self.present(activityVC, animated: true, completion: nil)</span>

运行截图

注意

我们在分享多张图片到朋友圈的时候会发现,我们在不做任何处理的时候,直接从手机相册调取多张图片分享的时候,分享失败。具体什么原因我研究了一下,发现分享的数据总共大小有限制;在这里举个例子,比如电梯,电梯限定的重量是固定的,所以不管你乘坐多少人,乘坐的人比较胖,那就乘坐的人比较少,如果乘坐的人比较瘦,那就可以多坐几个;所以UIActivityViewController分享多张图片到朋友圈的时候,我根据图片数量的多少,然后把图片压缩到指定宽高,比如一张图片,我就压缩成和微信压缩图片一样的大小1280,如果9张我就压缩成500;

代码

压缩图片的方法在下面粘出,其中compressibilityFactor为图片宽高的最大值;

  1. <span style="font-size:18px;">#import "WeChatJPEGImager.h"
  2. #define KCompressibilityFactor 1280.00
  3. @implementation WeChatJPEGImager
  4. #pragma mark - 压缩一张图片 最大宽高1280 类似于微信算法
  5. - (UIImage *)getJPEGImagerImg:(UIImage *)image{
  6. CGFloat oldImg_WID = image.size.width;
  7. CGFloat oldImg_HEI = image.size.height;
  8. //CGFloat aspectRatio = oldImg_WID/oldImg_HEI;//宽高比
  9. if(oldImg_WID > KCompressibilityFactor || oldImg_HEI > KCompressibilityFactor){
  10. //超过设置的最大宽度 先判断那个边最长
  11. if(oldImg_WID > oldImg_HEI){
  12. //宽度大于高度
  13. oldImg_HEI = (KCompressibilityFactor * oldImg_HEI)/oldImg_WID;
  14. oldImg_WID = KCompressibilityFactor;
  15. }else{
  16. oldImg_WID = (KCompressibilityFactor * oldImg_WID)/oldImg_HEI;
  17. oldImg_HEI = KCompressibilityFactor;
  18. }
  19. }
  20. UIImage *newImg = [self imageWithImage:image scaledToSize:CGSizeMake(oldImg_WID, oldImg_HEI)];
  21. NSData *dJpeg = nil;
  22. if (UIImagePNGRepresentation(newImg)==nil) {
  23. dJpeg = UIImageJPEGRepresentation(newImg, 0.5);
  24. }else{
  25. dJpeg = UIImagePNGRepresentation(newImg);
  26. }
  27. return [UIImage imageWithData:dJpeg];
  28. }
  29. #pragma mark - 压缩多张图片 最大宽高1280 类似于微信算法
  30. - (NSArray *)getJPEGImagerImgArr:(NSArray *)imageArr{
  31. NSMutableArray *newImgArr = [NSMutableArray new];
  32. for (int i = 0; i<imageArr.count; i++) {
  33. UIImage *newImg = [self getJPEGImagerImg:imageArr[i]];
  34. [newImgArr addObject:newImg];
  35. }
  36. return newImgArr;
  37. }
  38. #pragma mark - 压缩一张图片 自定义最大宽高
  39. - (UIImage *)getJPEGImagerImg:(UIImage *)image compressibilityFactor:(CGFloat)compressibilityFactor{
  40. CGFloat oldImg_WID = image.size.width;
  41. CGFloat oldImg_HEI = image.size.height;
  42. //CGFloat aspectRatio = oldImg_WID/oldImg_HEI;//宽高比
  43. if(oldImg_WID > compressibilityFactor || oldImg_HEI > compressibilityFactor){
  44. //超过设置的最大宽度 先判断那个边最长
  45. if(oldImg_WID > oldImg_HEI){
  46. //宽度大于高度
  47. oldImg_HEI = (compressibilityFactor * oldImg_HEI)/oldImg_WID;
  48. oldImg_WID = compressibilityFactor;
  49. }else{
  50. oldImg_WID = (compressibilityFactor * oldImg_WID)/oldImg_HEI;
  51. oldImg_HEI = compressibilityFactor;
  52. }
  53. }
  54. UIImage *newImg = [self imageWithImage:image scaledToSize:CGSizeMake(oldImg_WID, oldImg_HEI)];
  55. NSData *dJpeg = nil;
  56. if (UIImagePNGRepresentation(newImg)==nil) {
  57. dJpeg = UIImageJPEGRepresentation(newImg, 0.5);
  58. }else{
  59. dJpeg = UIImagePNGRepresentation(newImg);
  60. }
  61. return [UIImage imageWithData:dJpeg];
  62. }
  63. #pragma mark - 压缩多张图片 自定义最大宽高
  64. - (NSArray *)getJPEGImagerImgArr:(NSArray *)imageArr compressibilityFactor:(CGFloat)compressibilityFactor{
  65. NSMutableArray *newImgArr = [NSMutableArray new];
  66. for (int i = 0; i<imageArr.count; i++) {
  67. UIImage *newImg = [self getJPEGImagerImg:imageArr[i] compressibilityFactor:compressibilityFactor];
  68. [newImgArr addObject:newImg];
  69. }
  70. return newImgArr;
  71. }
  72. #pragma mark - 根据宽高压缩图片
  73. - (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize{
  74. UIGraphicsBeginImageContext(newSize);
  75. [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
  76. UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
  77. UIGraphicsEndImageContext();
  78. return newImage;
  79. }</span>

Demo下载地址

http://download.csdn.net/detail/u014220518/9702030

相关阅读

iOS-微信朋友圈图片压缩算法

http://blog.csdn.NET/u014220518/article/details/58136932

来源:http://blog.csdn.net/u014220518/article/details/53465631

iOS-微信分享多张图片(UIActivityViewController多图分享和多图分享失败)的更多相关文章

  1. IOS微信分享功能简单实现

    PS:此文以简单实现功能为主,不足之前还望指点,大神勿喷. 在此之前如何申请微信认证的Key就不说了,公司一般会有人搞 1.首先下载微信SDK:微信SDK下载地址(更多关于微信SDK信息文档请访问官方 ...

  2. APP分享多张图片到微信和朋友圈

    产品需求: 微信分享多图至好友,朋友圈.由于微信禁用了分享9图至朋友圈功能,这里分享微信只是将图片保存至本地,具体让用户手动分享. 问题分析: 微信没有提供分享多图的SDK,因此我们实现调用系统自带的 ...

  3. android 实现微信分享多张图片的功能

    昨天公司老大通知客户改需求了,原来的微信分享改成分享多张图片,然后屁颠屁颠跑到微信平台看了以后 心里千万只草泥马狂奔而过,微信平台没有提供分享多张的SDK有木有啊,我们只能自己调用系统自带的分享功能实 ...

  4. vue history模式 ios微信分享坑

    vue history模式 ios微信分享坑 问题分析:因为苹果分享会是调取签名失败是因为:苹果在微信中浏览器机制和安卓不同,有IOS缓存问题,和IOS对单页面的优化问题,通俗点说安卓进行页面跳转分享 ...

  5. vue history模式 ios微信分享 踩过的坑

    背景:教育项目,整体依赖于微信环境,涉及到微信分享.微信二次分享 问题:vue使用history模式在iso微信下分享设置出错(签名认证错误.分享设置失败) 问题发现路径 1.按照微信公众号官方文档设 ...

  6. iOS微信第三方登录实现

    iOS微信第三方登录实现   一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...

  7. iOS启动图和开屏广告图,类似网易

    iOS启动图和开屏广告图,类似网易 启动图是在iOS开发过程中必不可少的一个部分,很多app在启动图之后会有一张自定义的开屏广告图,点击该广告图可以跳转到广告图对应的页面.今天呢,和大家分享一下如何添 ...

  8. 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容

    第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...

  9. IOS 微信

    原文:http://blog.csdn.net/ysy441088327/article/details/8441608 按照常例,列一些网址先: 微信开放平台首页: http://open.weix ...

随机推荐

  1. 2--Python入门--Python数据集合类型--列表

    在基础数据类型的基础上,Python有6中数据集合的类型: 列表list,最常用的数据类型,以[]为标识 元组tuple,和list很相似,但是不能二次赋值,用()标识 集合set,和list类似,但 ...

  2. C++---String类小结

    本随笔是我自己在敲代码的时候一些感受,可能有的地方简略了,还有部分是融合了一点其他资料上的知识点,如有错误欢迎指出,谢谢_(:°з」∠)_ string类是C++中常用的字符串类型,比之普通的字符串要 ...

  3. 【转载】 A* 寻路算法 (个人认为最详细,最通俗易懂的一个版本)

    原文地址: http://www.cppblog.com/christanxw/archive/2006/04/07/5126.html =============================== ...

  4. bash & vi

    更高效的使用. 选中全文 ggVG 文件头:gg,文档尾:G redo: CTRL+r 折叠代码/打开折叠: zf ,进行折叠 zo, 打开折叠 zc,关闭折叠 跳到匹配{或}处: % 标记当前单词: ...

  5. MySQL篇,第三章:数据库知识3

    MySQL 数据库 3 索引 1.普通索引(MUL)   2.唯一索引(UNI)   3.主键索引(PRI) 1.使用规则 1.一个表中只能有一个主键(primary)字段 2.对应字段的值不允许重复 ...

  6. Gym - 101806T: Touch The Sky(贪心)

    Figure: The house floats up in the sky by balloons. This picture is also used in 2018 KAIST RUN Spri ...

  7. 小白入门photoscan

    1.安装 我装的是photoscanPro 1.4.5版本.[注]:刚开始是在官网上下载的,要收费就点了试用,结果当我等了一天把将近200张图片处理完后,告诉我试用版不能保存文件...(绝望-_- - ...

  8. 1100C NN and the Optical Illusion

    推公式,水题.cos()函数是默认弧度制的 #include <iostream> #include <cstring> #include <string> #in ...

  9. Beta周第14次Scrum会议(11/23)【王者荣耀交流协会】

    一.小组信息 队名:王者荣耀交流协会 小组成员 队长:高远博 成员:王超,袁玥,任思佳,王磊,王玉玲,冉华 小组照片 二.开会信息 时间:2017/11/23 17:02~17:14,总计12min. ...

  10. Red Hat OpenShift

    Core Concepts 基本概念 Master Master监控其他Node和Pod 提供Web Console Node Node是k8s的工作机器 Node中运行Pod,pod可以在node中 ...