【问题标题】:iOS, Swift, UIImagePicker allows editing crop tool removes transparency. Is there fix?iOS、Swift、UIImagePicker 允许编辑裁剪工具移除透明度。有修复吗?
【发布时间】:2017-06-11 22:47:01
【问题描述】:

当我从 UIImagePicker 获取具有透明背景的 PNG 图像时,它会插入具有透明背景的图像,如下所示:

当我设置时:

imagePicker.allowsEditing = true

它允许我在 UIImagePicker 提供的视图中按预期进行裁剪

但是当我按下“选择”时,它会返回黑色而不是透明背景的图像,如下所示:

两个结果之间的唯一变化是设置

imagePicker.allowsEditing = true

并在应用中裁剪图像。

有没有办法在裁剪时保持透明度或至少将黑色变为白色?

我已经搜索了互联网,但没有提到我可以看到的。

代码:

 func showImagePicker() {
    imagePicker.allowsEditing = true
    imagePicker.sourceType = .photoLibrary

    present(imagePicker, animated: true, completion: nil)
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let pickedImage = info[UIImagePickerControllerEditedImage] as? UIImage {
        compImageView?.contentMode = .scaleAspectFit
        compImageView?.backgroundColor = UIColor.clear
        compImageView?.image = pickedImage

    }

    dismiss(animated: true, completion: nil)
}

【问题讨论】:

  • 显示你的 imagePickerController 方法。
  • 您在 ImageView 或 PhotoLibrary 中看到保存的图像?以及为什么要设置两次 compImageView 背景?
  • @LukeStanyer:请将代码放在原始问题中,而不是评论中,并格式化。
  • @AllLelopath 完成感谢您的提示 :)

标签: ios swift image cocoa-touch uiimagepickercontroller


【解决方案1】:

默认情况下,UIImagePickerController 会删除编辑图像中的 alpha 通道。要获得这种透明度,您必须自己编辑图像。像这样实现委托方法:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {


        if let cropRect = info[UIImagePickerControllerCropRect] as? CGRect {
            if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
                let imageRef: CGImage = image.cgImage!.cropping(to: cropRect)!

                let image1: UIImage = UIImage(cgImage: imageRef, scale: image.scale, orientation: image.imageOrientation)

                imageView.image = image1
                picker.dismiss(animated: true, completion: nil)

            }

        }

    }

【讨论】:

  • 如果您放大裁剪工具,此代码将不起作用。它采用cropRect并将其应用于原始图像,而不是缩放时的图像。
  • UIImagePickerControllerCropRect 如果图片从相机捕获并从应用程序内的画廊获取,则返回错误的矩形。
【解决方案2】:

请试试这个代码。

import MobileCoreServices //importing for mediaType kUTTypeImage


func showImagePicker() {

    let imagePicker = UIImagePickerController()
    imagePicker.delegate = self
    imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
    let mediaTypes: Array<AnyObject> = [kUTTypeImage]
    imagePicker.mediaTypes = mediaTypes as! [String]
    imagePicker.allowsEditing = true
    self.present(imagePicker, animated: true, completion: nil)
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    if picker.sourceType == UIImagePickerControllerSourceType.photoLibrary {

        if let image = info[UIImagePickerControllerEditedImage] as? UIImage {

            dismiss(animated: true, completion: nil)
            compImageView?.image = image
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 2015-03-28
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    相关资源
    最近更新 更多