pythonnet:将 System.Drawing.Bitmap 转换为 PIL.Image
pythonnet: Convert System.Drawing.Bitmap to PIL.Image
我有一个创建图像的 .net 库。我需要在 python 中访问此图像,因此我尝试使用 pythonnet 调用 .net DLL。
我正在尝试使用以下答案转换 .NET 字节:然后创建 PIL.Image:
Convert Bytes[] to Python Bytes Using PythonNet
PIL: Convert Bytearray to Image
这是我的 python 代码:
import clr
preloadingiterator = clr.AddReference(r"C:\Users\Ian\source\repos\PreloadingIterator\PreloadingIterator\bin\Debug\net48\PreloadingIterator.dll")
from PreloadingIterator import ImageIterator, ImageBytesIterator, FileBytesIterator
from pathlib import Path
import io
from PIL import Image
class FileBytesIteratorWrapper():
def __init__(self, paths):
self.paths = paths
self.iterator = FileBytesIterator(paths)
def __iter__(self):
for netbytes in self.iterator:
pythonbytes = bytes(netbytes)
numBytes = len(pythonbytes)
image = Image.frombytes('RGB', (1920, 1080), pythonbytes)
yield image
此错误为:
ValueError: not enough image data
我认为这是因为我 return 是 PNG 编码字节,而不是原始字节,所以我这样更改了我的代码:
image = Image.frombytes('RGB', (1920, 1080), pythonbytes, decoder_name='png')
哪些错误:
'OSError: decoder png not available'
如何 return 来自 .NET 的图像数据并将其解码为 PIL 图像?
从 .NET 返回原始图像适用于此 python:
def __iter__(self):
for netbytes in self.iterator:
pythonbytes = bytes(netbytes)
image = Image.frombytes('RGB', (1920, 1080), pythonbytes)
yield image
然而,这样做的速度令人望而却步,因为 pythonnet 每张图像需要 1.3 秒,而在 python 或 .net 中原生需要 0.07s。
因此我停止使用 pythonnet 并将其重写为 TCP client/server 架构。
我有一个创建图像的 .net 库。我需要在 python 中访问此图像,因此我尝试使用 pythonnet 调用 .net DLL。
我正在尝试使用以下答案转换 .NET 字节:然后创建 PIL.Image:
Convert Bytes[] to Python Bytes Using PythonNet PIL: Convert Bytearray to Image
这是我的 python 代码:
import clr
preloadingiterator = clr.AddReference(r"C:\Users\Ian\source\repos\PreloadingIterator\PreloadingIterator\bin\Debug\net48\PreloadingIterator.dll")
from PreloadingIterator import ImageIterator, ImageBytesIterator, FileBytesIterator
from pathlib import Path
import io
from PIL import Image
class FileBytesIteratorWrapper():
def __init__(self, paths):
self.paths = paths
self.iterator = FileBytesIterator(paths)
def __iter__(self):
for netbytes in self.iterator:
pythonbytes = bytes(netbytes)
numBytes = len(pythonbytes)
image = Image.frombytes('RGB', (1920, 1080), pythonbytes)
yield image
此错误为:
ValueError: not enough image data
我认为这是因为我 return 是 PNG 编码字节,而不是原始字节,所以我这样更改了我的代码:
image = Image.frombytes('RGB', (1920, 1080), pythonbytes, decoder_name='png')
哪些错误:
'OSError: decoder png not available'
如何 return 来自 .NET 的图像数据并将其解码为 PIL 图像?
从 .NET 返回原始图像适用于此 python:
def __iter__(self):
for netbytes in self.iterator:
pythonbytes = bytes(netbytes)
image = Image.frombytes('RGB', (1920, 1080), pythonbytes)
yield image
然而,这样做的速度令人望而却步,因为 pythonnet 每张图像需要 1.3 秒,而在 python 或 .net 中原生需要 0.07s。
因此我停止使用 pythonnet 并将其重写为 TCP client/server 架构。