当前位置: 首页 > 面试题库 >

UIImageView不显示来自UIImagePickerController的PNG图像的透明度

马星阑
2023-03-14
问题内容

我当然希望我缺少一些东西,因为我不明白为什么这样做会起作用。我有一个PNG图片,它具有完全透明的背景,因为我想将其覆盖在内的其他图片上UIImageView

XCode项目中包含的PNG图像都可以正常工作。问题是,当我使用即时选择这些相同的PNG图像UIImagePickerController,然后将其分配给时UIImageView,出于某些非常奇怪的原因,它没有将其视为具有透明性的PNG图像,而是添加了白色背景。

有人以前见过这个,我该如何解决?

*更新#1:
我决定尝试一些似乎可以证实我的理论的事情。我决定通过电子邮件将自己保存到设备中的原始PNG图像通过电子邮件发送给我,瞧瞧,这些图像以JPG的形式出现在我身上。在我看来,当您将图像保存到iPhone上的“照片”时,它会将其转换为JPG,这让我感到非常震惊。希望有人能解决这个问题。原始图像testImage1.pngtestImage2.png保存到“照片”,然后通过电子邮件发送给我自己,并以IMG_XXXX.jpgIMG_XXXX.jpg

*更新#2:
我一直在围绕着我们做更多的事情,发现了一些东西,并且在此过程中能够回答我自己的问题。(1)我在UPDATE#1中的理论部分正确,但是保存照片时不会进行转换,好像是在进行中。内部照片存储原始图像扩展名(2)当我意识到自己UIImagePickerControllerDelegate正在使用时,我能够对此进行验证

let imageData = UIImageJPEGRepresentation(image, 1.0)

代替这个

let imageData = UIImagePNGRepresentation(image)

当我使用第二行代码时,它正在识别图像的原始透明度属性。


问题答案:

是的,对的调用UIImageJPEGRepresentation会将生成的图像转换为JPEG,但不支持透明度。

顺便说一句,如果您NSData出于其他原因(例如,上传到服务器,通过电子邮件等)想要获取图像,我建议同时反对UIImageJPEGRepresentationUIImagePNGRepresentation。如果使用小于1的品质因数,它们会丢失元数据,可能会使资产变大,如果图像质量下降,等等。

相反,我建议您返回并从“照片”框架中获取原始资产。因此,在Swift 3中:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let url = info[UIImagePickerControllerReferenceURL] as? URL {
        let result = PHAsset.fetchAssets(withALAssetURLs: [url], options: nil)
        if let asset = result.firstObject {
            let manager = PHImageManager.default()
            manager.requestImageData(for: asset, options: nil) { imageData, dataUTI, orientation, info in
                if let fileURL = info!["PHImageFileURLKey"] as? URL {
                    let filename = fileURL.lastPathComponent
                    // use filename here
                }

                // use imageData here
            }
        }
    }

    picker.dismiss(animated: true)
}

如果还必须支持iOS 7,则可以使用等效的ALAssetsLibraryAPI,但是思路是相同的:获取原始资产,而不是通过来回传递UIImage



 类似资料:
  • 我尝试过将png-8从url加载到Imageview,但是透明度丢失并变黑。所以我尝试了png-24和相同的问题。 关键是,如果我从url复制图像,并将其粘贴到Photoshop中,透明度也是黑色的! 然而在网络上,它表现得很好,在iOS上,它表现得很完美。 我设置了解码器选项,甚至还尝试在onCreate()中设置窗口。 然后分别试了这个 然后试着把它们放在一起。这些都是我在网上能找到的解决方案

  • 我试图拖动对象表示为PNG图像透明背景从AnchorPane到HBox。 我使用以下线条将图像设置为拖动视图: 对于不透明的背景图像,这一切都很好,但对于透明的图像,图像的背景是白色的,不透明度为“0.8”。 我尝试为节点拍摄快照: 但它不起作用,白色背景仍然存在。有没有其他方法可以让它像原始图像一样透明?

  • #klem1,#klem2 { opacity:0.4; filter:alpha(opacity=40); /* For IE8 and earlier */ } #klem1:hover,#klem2:hover { opacity:1.0; filter:alpha(opacity=100); /* For IE8 and earlier */ } div.background { widt

  • 我的任务是: 创建一个TBitmap对象 如何在Delphi XE中做到这一点?

  • 问题内容: 嗨,我的数据库中有一个图像表。这些与细节一起存储为Blob,例如图像类型和名称。 我在显示图像时遇到问题,我得到的只是一个带有红色十字的白框。码: 谢谢 问题答案: 好吧,这是一个简短的答案。 检查您的Blob类型是否至少为MEDIUMBLOB,它能够存储高达16M的数据

  • 问题内容: 我正在尝试创建透明的png图像,并对其他各种png和jpg进行分层,以创建具有透明度的最终png。我在创建初始的空透明png时遇到问题。目前有白色背景。 谁能指出我正确的方向。到目前为止,这是我的代码… 问题答案: 在每个新图层上设置。 尝试这个: