- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 iOS 10 中创建并保存 UIImage
。我可以通过拍摄 UIView
快照或使用 UIGraphicsImageRenderer
创建它( 如下所示)。
- (UIView *)createIcon
{
UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:CGSizeMake(200, 200)];
UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull context) {
[[UIColor darkGrayColor] setStroke];
[context strokeRect:renderer.format.bounds];
[[UIColor colorWithRed:158/255.0 green:215/255.0 blue:245/255.0 alpha:0.5] setFill];
[context fillRect:CGRectMake(30, 30, 140, 140)];
[[UIColor colorWithRed:243/255.0 green:122/255.0 blue:216/255.0 alpha:0.3] setFill];
CGContextFillEllipseInRect(context.CGContext, CGRectMake(30, 30, 120, 120));
}];
UIImageView *showImage = [[UIImageView alloc] initWithImage:image];
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
return showImage;
}
但是,当我尝试通过包含倒数第二个语句来使用 UIImageWriteToSavedPhotosAlbum
进行保存时,Xcode 会进入调试状态,并显示以下错误报告
(lldb) bt
* thread #5, queue = 'com.apple.root.default-qos', stop reason = signal SIGABRT
* frame #0: 0x00000001101611a6 libsystem_kernel.dylib`__abort_with_payload + 10
frame #1: 0x000000011015b86e libsystem_kernel.dylib`abort_with_payload_wrapper_internal + 89
frame #2: 0x000000011015b89b libsystem_kernel.dylib`abort_with_payload + 9
frame #3: 0x0000000108ab3af7 TCC`__CRASHING_DUE_TO_PRIVACY_VIOLATION__ + 182
frame #4: 0x0000000108ab3a41 TCC`__TCCAccessRequest_block_invoke.77 + 665
frame #5: 0x0000000108ab7273 TCC`__tccd_send_block_invoke + 274
所以,即使我没有使用相机来创建图像,将其保存到相册也是侵犯隐私的行为(嘘,嘘)!我知道可以设置 privacy keys in the plist但还有更明智的选择吗?
澄清
我希望使用渲染图像(或 View 快照)作为应用程序中的资源。那么除了还有更明智的选择吗?
也许我应该问
是否有其他位置可以保存图像(即 PNG 或 JPG 文件),这样隐私就不是问题?
最佳答案
您可以将任何 UIImage 保存到相册中,但首先您必须征求用户的许可,因为这确实是一个隐私问题。如果他们不给您访问权限,那么您根本无法保存图像。
最明智的方法是将所需的隐私 key 添加到 info.plist。
这是 info.plist xml 定义,尽管在属性列表中添加键更容易:
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Message requesting the ability to add to the photo library</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Message requestion the ability to access the photo library</string>
如果您添加这些内容,那么当您第一次尝试访问或添加到照片库时,将显示一个弹出窗口,其中包含您的消息,允许用户决定是否希望您的应用有权访问。
将其放入 info.plist 文件的一个很好的理由是,所有访问请求都位于一个易于可见的位置,而不是项目中随机的某个位置。
编辑
以下是如何将图像保存在不会引起隐私问题的文档中:
NSData *imageData = UIImagePNGRepresentation(image);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"image.png"]; //Add the file name
[imageData writeToFile:filePath atomically:YES]; //Write the file
如果您想要 jpg 而不是 png,请使用此代替:
NSData *imageData = UIImageJPEGRepresentation(image, 0.9); // Use whatever compression ratio you want instead of 0.9
关于iOS10 UIImageWriteToSavedPhotosAlbum TCC__CRASHING_DUE_TO_PRIVACY_VIOLATION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57149499/
我想用下面的void API把抓拍到的图片写入相册,但是有2个参数不是很清楚 UIImageWriteToSavedPhotosAlbum ( UIImage *image, id
下面的代码将我从应用程序中拍摄的图像保存到相机胶卷中。我试图弄清楚如何将首次启动相机时显示在拍摄图像按钮旁边的左角的缩略图更新为我保存的图像。它不应该总是添加到相机胶卷中的最后一张图像吗?这是我保存它
我正在尝试拍摄应用程序当前 View 的屏幕截图并将其保存到相册(然后通过电子邮件或彩信发送)。 UIGraphicsBeginImageContext(self.view.bounds.size);
我正在尝试将 ImageView 中当前的图像保存到相机胶卷中。我尝试保存的图像通过 [mainImage setImage:outputImage]; 完美显示在 ImageView 中; 但是,当
我正在尝试将裁剪的图像保存到相机胶卷中。 (我需要以编程方式进行操作,我无法让用户对其进行编辑) 这是我(仍然很基本)的剪切并保存代码: - (void)cutAndSaveImage:(UIImag
我想在 iOS 10 中创建并保存 UIImage。我可以通过拍摄 UIView 快照或使用 UIGraphicsImageRenderer 创建它( 如下所示)。 - (UIView *)creat
我正在尝试从 GLKView 获取屏幕截图并将其保存到照片库。不幸的是,保存的照片质量很低,我不知道为什么。 这是使用 ImageView 类显示在屏幕上的 UIImage 的链接:https://w
我目前认识到的第一个函数调用 UIImageWriteToSavedPhotosAlbum 阻塞主线程大约 1.5 秒,即使在 iphone 4s/ipad2 上也是如此。 我也试过像这样将它保
我想在 iOS 10 中创建并保存一个 UIImage。我可以通过拍摄 UIView 快照或使用 UIGraphicsImageRenderer 创建它( 如下所示)。 - (UIView *)cre
我正在运行代码 UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) 将照片(来自 URL 的图像)保存到相册库。这非常有效。但是,这是一个盲函数,
我可以调用 UIImageWriteToSavedPhotosAlbum 并毫无问题地处理完成: class A { func saveNow() { UIImageWrite
我正在从字符串生成条形码,然后尝试将此图像保存到 iPhone 照片库。这是我的代码: @IBOutlet weak var uuidLabel: UILabel! @IBOutlet weak va
努力让 UIImageWriteToSavedPhotosAlbum 快速工作 https://developer.apple.com/library/ios/documentation/UIKit/
好吧,我已经搜索遍了,但似乎找不到我需要的答案。 :-( 这是我正在做的事情以及我需要发生的事情。我有一个 UIImageView,我可以使用 UIPanGestureRecognizer、UIRot
用户使用相机拍摄照片后,我尝试使用按钮将照片保存到相机胶卷中,但我不知道为什么我的照片没有保存在照片库中! 这是我的代码: -(IBAction)savePhoto{ UIImageWrite
我开发了一个 CGImage,当程序使用以下命令将其显示在屏幕上时它工作正常: [output_view.layer performSelectorOnMainThread:@selector(set
我有一个正在使用的应用 UIImageWriteToSavedPhotosAlbum(img, self, "image:didFinishSavingWithError:contextInfo:",
我正在尝试使用 UIImageWriteToSavedPhotosAlbum() 函数捕获并保存图片。这是我现在的代码。 @IBAction func CameraAction(sender:
我在 UIImagePickerController 类中使用 UIImageWriteToSavedPhotosAlbum 方法来保存使用我的应用程序拍摄的照片。它工作正常,但问题是每张保存的照片需
我使用 GPUImage2( https://github.com/BradLarson/GPUImage2 ) 编写了代码。 我确认我的代码在触摸设置按钮(渲染过滤后的图像)之前成功保存了图像。 但
我是一名优秀的程序员,十分优秀!