迅速,由于损坏的文件类型隐藏为JPG

时间:2020-04-21 22:27:44

标签: ios swift laravel image image-processing

我现在在XCode上遇到一个大问题,而在一般情况下是MacOS / iOS。

对于背景,我正在使用的网站应用程序框架是laravel,而我用来裁剪配置文件图像的图像编辑器称为图像干预,这是laravel的非常流行的扩展。

要直接进入它-我正在为我的网站创建一个基本的配套应用程序,该应用程序与几乎所有其他网站一样,将图像存储在服务器上。可以通过www.mywebsite.com/storage/基本URL进行访问,并在文件末尾添加文件名。还有很多,但是这都不是问题。

我已经使用了很多次,因为有多个文件夹用于不同的图像关系。一个文件夹,仅将其命名为postimages(因此链接现在为www.mywebsite.com/storage/postimages),返回没有问题的图像,到目前为止,我已经多次使用它。我快速使用以返回不同图像的代码如下(在我的特定视图中)

func getPic(urlLink: String)-> Image? {
    let baseURL = "https://www.mywebsite.com/storage"
    let url = URL(string: baseURL + urlLink)
    let data = try? Data(contentsOf: url!)
    let image = UIImage(data: data!)
    let image2 = Image(uiImage: (image ?? nil)!)
    return image2
}

所以这可能写得不好或没什么,但这绝对不是任何问题的根源,因此请按您的意愿进行处理。无论如何,我还是在多个视图中使用了此功能,以便从存储端点上的不同文件夹中检索多个不同的图像。

尝试从其他端点(特别是我的/profileimages端点)检索图像时,问题刚出现。到目前为止,正如我已经说过的那样,此功能从未有过问题。现在,当我尝试使用它获取个人资料图像时,它使应用程序崩溃,并显示错误

“在展开可选值时意外发现nil”

let data = try? Data(contentsOf: url!)所在的行周围。

现在,这使我感到非常悲伤,因为URL(悬停时)显示了 正确的URL链接,当我将其输入浏览器时,它返回了 有关图片。那么,为什么图像以某种方式返回nil?一世 不知道。

要想揭开谜底,我一直在尝试解决此问题,方法是下载默认的配置文件图片,然后更改功能以在URL上没有数据的情况下返回默认图片(即使应该存在,有100%的时间)。

当我尝试使用https://www.mywebsite.com/storage/profileimages/blank.jpg链接下载默认的个人资料图片时,我尝试将其作为资产添加到XCode中,并且在其上方有一个很大的红色感叹号。尝试使用预览打开它时出现错误“无法打开文件“ blank.jpg”。该文件可能已损坏或使用了预览无法识别的文件格式”。这令人惊讶,因为在我的Windows计算机上,尝试执行相同的操作根本没有问题。

我的怀疑是,因为我使用扩展名将轮廓图像裁剪并调整为正方形大小,因此在保存文件的过程中,图像干预破坏了文件,而Windows将其识别为JPEG,而Swift却没有。

我想问问那些对图像处理更有经验的人,请帮助我理解这一点,显然,显示用户的个人资料图片对于创建网站移动伴侣应用程序至关重要,现在除了基本的文本选项卡视图之外我什么也不能做没有按预期工作。

2 个答案:

答案 0 :(得分:0)

我将发布自己的答案,因为我已经能够解决这个谜团。第一个问题是默认映像确实损坏了。我用GIMP制作了一个新的,并一直使用它。为什么Windows仍然可以打开它,而MacOS不能打开它,这也许超出了我,也许他们对JPG文件的组成有更严格的指导,因此不管是什么问题,该文件都可以通过Windows而不是Mac偷偷溜走,显然,替换文件解决了我的问题。第二个问题是返回nil,我发现这是因为我没有对URL链接进行百分比编码。一些用户发布的图片中带有空格,因此我需要添加百分比编码才能使其正常工作(出于某种原因)。这两个解决方案的结合消除了我所面临的整个问题,并且我的图片不再返回nil。

答案 1 :(得分:-1)

我也遇到了同样的问题,但是我找到了解决方案,该图像为webp格式,该格式由google专为chrome设计。 iOS将不支持webp。

相关问题