- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
High Efficiency Image File (HEIF) 格式是将图像从 iPhone 空投到 OSX 设备时的默认格式。我想用 Python 编辑和修改这些 .HEIC 文件。
我可以修改手机设置以默认保存为 JPG,但这并不能真正解决能够使用其他文件类型的问题。我仍然希望能够处理 HEIC 文件以进行文件转换、提取元数据等。( Example Use Case -- Geocoding )
枕头
这是在尝试读取此类文件时使用 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 if filename else fp))
2688
2689 #
OSError: cannot identify image file 'IMG_2292.HEIC'
看起来需要支持 python-pillow ( #2806 ),但存在许可/专利问题阻止它。
ImageMagick + 魔杖
看起来 ImageMagick可能是一个选择。在执行了 brew install imagemagick
和 pip install wand
但是我没有成功。
$ 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 wand.image import Image
In [2]: with Image(filename='img.jpg') as img:
...: print(img.size)
...:
(4032, 3024)
In [3]: with Image(filename='img.HEIC') as img:
...: print(img.size)
...:
---------------------------------------------------------------------------
MissingDelegateError Traceback (most recent call last)
<ipython-input-3-9d6f58c40f95> in <module>
----> 1 with Image(filename='ces2.HEIC') as img:
2 print(img.size)
3
~/.env/py3/lib/python3.7/site-packages/wand/image.py in __init__(self, image, blob, file, filename, format, width, height, depth, background, resolution, pseudo)
4603 self.read(blob=blob, resolution=resolution)
4604 elif filename is not None:
-> 4605 self.read(filename=filename, resolution=resolution)
4606 # clear the wand format, otherwise any subsequent call to
4607 # MagickGetImageBlob will silently change the image to this
~/.env/py3/lib/python3.7/site-packages/wand/image.py in read(self, file, filename, blob, resolution)
4894 r = library.MagickReadImage(self.wand, filename)
4895 if not r:
-> 4896 self.raise_exception()
4897
4898 def save(self, file=None, filename=None):
~/.env/py3/lib/python3.7/site-packages/wand/resource.py in raise_exception(self, stacklevel)
220 warnings.warn(e, stacklevel=stacklevel + 1)
221 elif isinstance(e, Exception):
--> 222 raise e
223
224 def __enter__(self):
MissingDelegateError: no decode delegate for this image format `HEIC' @ error/constitute.c/ReadImage/556
还有其他可用于以编程方式进行转换的替代方法吗?
最佳答案
你们应该看看这个库,它是 libheif 的 Python 3 包装器库,它应该服务于您的文件转换、提取元数据的目的:
https://github.com/david-poirier-csn/pyheif
https://pypi.org/project/pyheif/
示例用法:
import io
import whatimage
import pyheif
from PIL import Image
def decodeImage(bytesIo):
fmt = whatimage.identify_image(bytesIo)
if fmt in ['heic', 'avif']:
i = pyheif.read_heif(bytesIo)
# Extract metadata etc
for metadata in i.metadata or []:
if metadata['type']=='Exif':
# do whatever
# Convert to other file format like jpeg
s = io.BytesIO()
pi = Image.frombytes(
mode=i.mode, size=i.size, data=i.data)
pi.save(s, format="jpeg")
...
关于python - 如何在 Python 中使用 HEIC 图像文件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54395735/
下面的ffmpeg图像转换适用于诺基亚构象heic文件,但不适用于iphone heic图像 ffmpeg -i c001.heic -c:v mjpeg -frames:v 1 -pix_fmt r
我在 ASP.NET 中有一个支持 JPG/PNG/GIF 的图像上传表单,我认为这就足够了。直到 Apple 推出了他们新的 HEIC 图像格式。我如何在 C# 中处理它? 在 Google 中搜索
我正在尝试使用 ImageIO 以 HEIC 文件格式保存图像。代码看起来像这样: NSMutableData *imageData = [NSMutableData data]; CGImageDe
我正在使用新的 HEIC 格式将蒙版图像保存到文档目录。与同一蒙版图像的 PNG 版本进行比较时,我发现添加了一些新的工艺品。 这是受影响图像的屏幕截图: 这是展示此问题的工作存储库的链接(请通过新的
我正在做人脸检测项目,想知道opencv是否在imread()和imwrite()方法中提供了对heic格式的支持?可以使用 cv2 的 imread() 函数读取图像并使用 cv2.imwrite(
对于 c++ 项目,我需要打开并显示 HEIF (.heic) 图像。我所知道的(如果我是对的)是 HEIF 图像基于 ffmpeg 标准,并且需要读取 H265 编解码器。 我找到了几个开源 H26
IOS 11 上的新 .HEIC 文件导致问题,因为图像托管服务不支持它。 相机胶卷 api 正在返回 .HEIC 文件。我们如何才能获得 .JPG/.PNG 文件。或将 .HEIC 转换为 .JPG
下面的方法获取所选照片中特定点的像素颜色。当选择 JPG 时,下面的图像处理速度很快。当选择 HEIC 照片时,下面的图像处理速度很慢。速度可能慢约 40 倍(7 秒 vs 5 分钟)。 我想知道这是
我的印象是 UIImage 会支持 iOS 11 中引入的 HEIC/HEIF 文件。但在我的测试中,情况似乎并非如此。如果我确实让 image = UIImage(named: "test") 指向
我正在尝试在 jpeg 中转换 heic 文件,同时导入所有元数据(如 gps 信息和其他内容),不幸的是,转换下面的代码是可以的,但没有元数据存储在创建的 jpeg 文件中。 任何人都可以描述我需要
试图弄清楚 Safari 是否支持或不支持 iOS 11 的新图像格式 HEIC/HEIF。尝试了很多东西,它似乎不起作用。谢谢。 最佳答案 通过检查 CanIUse ,iOS11在Safari中不支
Windows Imaging Component 用于解码 heif 图像。但是,成功解码图像需要来自 Microsoft 商店的额外应用程序(heif 图像扩展、hevc 视频扩展)。 没有它们,
我正在尝试将多个图像上传到后端,但我正在使用的后端不支持图像的 heic 格式。所以我想将这些heic图像转换为JPG并使用文件位置上传。我使用下面的方法从 fileURL 上传图像。 func up
我想对图库中的图像(由 iPhone 相机拍摄)执行编辑,例如 JEPG 压缩,但当输入图像是 HEIC 图像,但适用于 JPEG 图像。 我通过 UIImagePickerController 方法
我有一个应用程序,用户可以在其中上传多张图片,所有图片都将存储在服务器中,并将显示在我的 iOS 应用程序的 Web View 中。 现在在 iOS 10 之前一切正常,但突然我们开始看到一些图片/图
High Efficiency Image File (HEIF) 格式是将图像从 iPhone 空投到 OSX 设备时的默认格式。我想用 Python 编辑和修改这些 .HEIC 文件。 我可以修改
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我在项目的 xcassets 文件夹中设置了 .heic 图像以节省一些空间。但是我无法通过 UIImage(named:) 构造函数加载它们。我总是得到 nil,所以我必须加载它们的唯一方法是指定
HEIC 是 Apple 自己的格式,用于存储使用 iOS 相机拍摄的高分辨率图像。但我会存储在后端 JPG 上,因为 HEIC 在大多数浏览器中不显示,甚至在 Safari 中也不显示。 解决方案1
当通过 FileReader api 从输入元素读取文件时,它可以工作,但我的 android 设备也允许发送文件,而且它似乎无论如何都发送 heic 文件,这会导致控制台中没有任何错误的空图像。直接
我是一名优秀的程序员,十分优秀!