iOS 富文本之图文混排(插入图片上传到服务器)

iOS 富文本之图文混排(插入图片上传到服务器),第1张

第一版,以实现功能为主,相比较简陋一点,多多包含,先上效果图

1.先修改键盘上的工具栏

2.相机的点击事件,也就是图片上传服务器的方法

3.上传服务器的相关操作

下面的方法是将富文本转换成纯文本的信息

以上是转换成纯文本,然后拼接上url操作,可以选择性忽略。

4.NSTextAttachment 延展,为NSTextAttachment添加一个属性(关键操作)

iOS 11支持GIF文件了。那么怎么上传自己想要的GIF图片呢,

1.调用相册:UIImagePickerController 拿到代理返回的info数组。

2,最重要的一步,转为NSData(一般服务器以data 上传),用系统#import <Photos/Photos.h>

如果是iOS 11 以前,则可以用<AssetsLibrary/AssetsLibrary.h>

-( void )tranUpLoadImageGifWithImage:(NSDictionary<NSString *, id >*)info{

    // 上传gif

    //转为NSData

     if ( @available (iOS11.0, *)) {

        PHAsset *phAss = [info valueForKey:UIImagePickerControllerPHAsset]

        PHImageRequestOptions *options = [PHImageRequestOptions new]

        options.resizeMode = PHImageRequestOptionsResizeModeFast

        options.synchronous= YES

        PHCachingImageManager *mager = [[PHCachingImageManager alloc]init]  [magerrequestImageDataForAsset:phAssoptions:optionsresultHandler:^(NSData* _Nullable imageData,NSString* _Nullable dataUTI,UIImageOrientationorientation,NSDictionary* _Nullable info) {

    NSLog(@"能拿到:%@",imageData)

    //上传服务器的方法 

 [ self upLoadImageData:imageData]

        }]

    } else {

        // Fallback on earlier versions

    }

}

3. 拿到NSData,就能上传服务器啦

-( void )upLoadImageData:(NSData*)data{

    自己服务器上传地址 

    NSString*urlString = [NSStringstringWithFormat:@"%@",BASE_URL]

    NSDictionary *params = @{@"image_model":@"1"}

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]

    [ProgressHUD showLoading]

    [managerPOST:urlStringparameters:paramsheaders: nil constructingBodyWithBlock:^( id   _Nonnull formData) {

        NSString*str =@"image_file"

        NSString*fileName

        // 上传图片,以文件流的格式

        /**

         *filedata : 图片的data

         *name    : 后台的提供的字段

         *mimeType : 类型

         */

        fileName = [NSStringstringWithFormat:@"%@.gif", str]

        [formDataappendPartWithFileData:dataname:strfileName:fileNamemimeType:@"image/gif"]

    }progress: NULL success:^(NSURLSessionDataTask* _Nonnull task, id   _Nullable responseObject) {

        [ProgressHUDdismiss]

        //打印看下返回的是什么东西

        NSLog(@"上传图片成功:%@",responseObject)

        [ProgressHUDshow:@"图片上传成功!"]

    }failure:^(NSURLSessionDataTask* _Nullable task,NSError* _Nonnull error) {

        [ProgressHUDdismiss]

        [ProgressHUDshow:@"图片上传失败!"]

        NSLog(@"上传图片失败,失败原因是:%@", error)

    }]

}

ios上传图片到服务器,渲染到页面上之后会旋转90度,android显示正常。

ios相机加入了方向传感器,能够记录相机拍摄的方向,这些信息保存在照片中,当相机浏览这些照片的时候,相机可以根据照片中的方向信息,结合此时相机的方向,对照片进行旋转

iOS拍摄的图片提供了EXIF(可交换图像文件格式:Exchangeable image file format)信息,Orientation 旋转信息等存储在其中。

判断是否有旋转:

上传到七牛云上的路径 拼接上 + ''?imageInfo"

如果有旋转返回数据

{"size":2645332,"format":"jpeg","width":4032,"height":3024,"colorModel":"ycbcr","orientation":"Right-top"}

没有旋转返回数据

{"size":371939,"format":"png","width":375,"height":1078,"colorModel":"rgba"}

很显然: 有orientation说明有旋转问题

让图片不旋转:图片路径后面拼接 + "?imageMogr2/auto-orient"(可以不判断是否有旋转信息,直接将所有的图片拼接上,简单粗暴)

读取照片的 Exif 信息,判断 Orientation 的值,然后将图片进行相应的旋转


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/244940.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存