Apple在iOS 11中引入了一种名为HEIF(.heic文件扩展名)的新图像格式.我知道您可以从iOS设备将图像导出为JPG,但我想将HEIC文件上传到我的服务器并将其转换为可以在所有其他设备上显示的JPEG文件.
任何人都可以推荐一种有效的方法来实现这一目标吗?
回答:
由于这个问题已经结束,我将在这里为你们其他人编辑我的答案.我们现在使用此库将HEIC转换为JPEG:https://github.com/monostream/tifig
此外,ImageMagick现在支持将HEIC转换为JPEG,这要归功于@toshic的分支
感谢@monostream和@toshic为您的贡献!
编辑1:编辑问题的措辞更具体,符合SO指南
EDIT2:由于此主题现已关闭,因此添加了答案:/
我正在使用文件选择输入来上传多个文件。用户选择文件后,我会循环排序FileList
以检查是否有任何 HEIC/HEIF 文件,以便显示错误消息。
const fileSelect = document.createElement("input");
fileSelect.setAttribute("type", "file");
fileSelect.setAttribute("multiple", "multiple");
fileSelect.click();
Run Code Online (Sandbox Code Playgroud)
if(!this.vm.acceptedTypes.includes(file.type)) {
console.log(file);
this._$inj.globalFac.showAlert(file.name, `Error: File type ${file.type} is not supported.`);
continue;
}
Run Code Online (Sandbox Code Playgroud)
但是,当用户上传 HEIC/HEIF 文件时,该type
属性为空。为什么?
对于 C++ 项目,我需要打开并显示 HEIF (.heic) 图像。我所知道的(如果我是对的)是 HEIF 图像基于 ffmpeg 标准,并且需要读取 H265 编解码器。
我找到了几个开源的 H265 编解码器:
我可以打开和显示 H265 编码的视频文件,但我无法简单地打开、显示或转换 .heic 图像。他们都返回一个错误,或者什么都不做。
老实说,我有点困惑,因为 HEIF 标准似乎是一个保守的秘密。我找不到可以让我找到解决方案的相关信息。我发现的那些只是技巧和变通方法,例如强制设备(我在这里谈论的是使用新 iOS11 的 Apple iPhone)生成 jpg 图像而不是 heic,或者使用像 dr.fone 这样的第三方应用程序。当然,这些解决方案与我无关。
所以,有人可以告诉我应该对 .heif 图像使用哪种编解码器,以及如何使用它来打开它?或者是否有允许操作此类图像文件的开源库或示例?有人可以为我指出好的方向吗?
在上传HEIF图像时,似乎iOS 11手机游戏将剥离一些EXIF(GPS/DateTimeOriginal),如何保存EXIF?
我已经从我的项目中设置.heic
了我的xcassets
文件夹中的图像以节省一些空间.但是我无法通过UIImage(named:)
构造函数加载它们.我总是得到nil
,所以我必须加载它们的唯一方法是指定URL.你知道为什么吗?
imageView.image = UIImage(named: "stone") // This returns nil.
Run Code Online (Sandbox Code Playgroud)
再次,如果我将它们作为文件添加到项目中,并通过此方法访问它们,我创建的一切都很好(或使用像SDWebImage这样的库),但我相信我正在失去应用程序细化的强大功能,因为图像作为文件托管因此,例如iPhone 7将只在需要时同时拥有2x
和3x
分辨率2x
.
extension UIImage {
convenience init?(heicName: String, useScale: Bool = false) {
guard let resourcePath = Bundle.main.path(forResource: heicName.fileName(fileExtension: .heic, useScale: useScale), ofType: nil) else {
return nil
}
let url = URL(fileURLWithPath: resourcePath) as CFURL
guard let source = CGImageSourceCreateWithURL(url, nil),
let image = CGImageSourceCreateImageAtIndex(source, 0, nil) else {
return nil
}
self.init(cgImage: image)
}
} …
Run Code Online (Sandbox Code Playgroud) 将图像从iPhone空投到OSX设备时,默认为高效率图像文件(HEIF)格式。我想用Python编辑和修改这些.HEIC文件。
我可以修改手机设置以默认将其另存为JPG,但这并不能真正解决能够使用其他文件类型的问题。我仍然希望能够处理HEIC文件以进行文件转换,提取元数据等。(示例用例-地理编码)
枕头
这是尝试读取此类文件时使用Python 3.7和Pillow的结果。
$ ipython
Python 3.7.0 (default, Oct 2 2018, 09:20:07)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from PIL import Image
In [2]: img = Image.open('IMG_2292.HEIC')
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-2-fe47106ce80b> in <module>
----> 1 img = Image.open('IMG_2292.HEIC')
~/.env/py3/lib/python3.7/site-packages/PIL/Image.py in open(fp, mode)
2685 warnings.warn(message)
2686 raise IOError("cannot identify image file %r"
-> 2687 % (filename …
Run Code Online (Sandbox Code Playgroud) 我有一个包含多个图像的 HEIC 文件。如何提取 JPEG 或 PNG 格式的图像序列?是否有 NuGet 可以简化该过程?
这是一款适用于 Android、IOS 和 UWP 的图像处理软件。我一直在寻找编写这部分代码的起点。
我的印象是UIImage将支持iOS 11中引入的HEIC / HEIF文件。在我的测试中,情况似乎并非如此。如果我确实让image = UIImage(named:“ test”)指向test.heic,那么image为nil。如果我使用图像文字,那么它将使应用程序崩溃。想知道现在是否尚未实现。谢谢。
我正在尝试使用 Java 中的 .heic 图像。本机 Java 无法处理这种格式。我想将其转换为不同的格式(.png 是理想的)或将其转换为 java.awt.Image 或类似的图像处理结构。我一直在互联网上搜索库,但数量不多,我实际使用的库(ConvertApi)与我的项目不兼容,因为我使用的是 JDK 1.7(这是不可协商的,这不是我的项目)所以我需要使用我拥有的东西)并且这个版本的 Java 没有 CompletableFuture 类。
有没有其他方法可以做到这一点?
我正在做一个人脸检测项目,想知道opencv是否在imread()和imwrite()方法中提供对heic格式的支持?可以使用 cv2 的 imread() 函数读取图像并使用 cv2.imwrite() 函数写入图像吗?(使用语言:Python3.6)