将Image Python代码转换为C# - c#

我正在尝试将以下Python代码移植到C#。

import Image, base64, StringIO
def pngstore(input):
    input = open(input, "r").read()
    pixels = len(input) / 3

    img = Image.new("RGB", (pixels, 1), (0,0,0))

    bytes = []
    for character in input:
        bytes.append(ord(character))

    while len(bytes) % 3 > 0:
        bytes.append(0)

    for x in range(0, pixels):
        img.putpixel((x, 0), (bytes[x*3], bytes[x*3 + 1], bytes[x*3 + 2]))

    output = StringIO.StringIO()
    img.save(output, format="PNG")
    output.seek(0)

    return base64.b64encode(output.read())

while()循环中,将0附加到byteimg.putpixelord(character))的附加位置让我有些困惑。

FileInfo file = new FileInfo(FD.FileName);
long pixels = file.Length / 3;
byte[] bytes = File.ReadAllBytes(file.FullName);

Bitmap image = new Bitmap(Image.FromFile(fileToOpen));
while (bytes.Length % 3 > 0)
{
    bytes.CopyTo(?); // ?
}

foreach (var x in Enumerable.Range(0, (int)pixels))
{
    //Color color = Color.FromArgb(, 0, 0, 0);
    //image.SetPixel(x, 0, color);
}

image.Save("newfile.png", ImageFormat.Png);

参考方案

bytes.append(ord(character))的for循环将字符从输入转换为数值。 C#立即通过File.ReadAllBytes()读取字节作为数值。

while循环确保bytes的长度可以被3整除。它将列表用零填充。 Array.Resize()可能是要走的路。我认为这是padding an existing array in C#的最佳解决方案。我认为File.ReadAllBytes()不能被迫添加填充或填充现有数组。

整个图像只有一行像素。带有img.putpixel()的循环使图像从左向右移动,并将当前像素的颜色设置为RGB通道设置为相应字节值的颜色。不使用Alpha通道。使用Color.FromArgb() with three parameters就足够了。

要修复的另一个细节:您要初始化new, empty Bitmap with given dimensions。无论如何,可以将new Bitmap(Image.FromFile(fileToOpen))简化为new Bitmap(fileToOpen)

最终代码(没有您似乎不想要的Base64编码)是

FileInfo file = new FileInfo(FD.FileName);
int pixels = (int)file.Length / 3; // int must be enough (anyway limited by interfaces accepting only int)

byte[] bytes = File.ReadAllBytes(file.FullName);
if (file.Length % 3 != 0) {
    Array.Resize(ref bytes, 3 * pixels + 3);
}

Bitmap image = new Bitmap(pixels, 1);
foreach (var x in Enumerable.Range(0, pixels)) {
    image.SetPixel(x, 0, Color.FromArgb(bytes[3*x] , bytes[3*x+1], bytes[3*x+2]));
}
image.Save("newfile.png", ImageFormat.Png);

有没有一种方法可以有效地矢量化图像上的Tensorflow操作? - python

Tensorflow有大量的变换,可以应用于表示图像([高度,宽度,深度])(例如tf.image.rot90()或tf.image.random_flip_left_right())的3D张量。我知道它们应与队列一起使用,因此它们只能在一个图像上运行。但是,是否有一种方法可以对操作进行矢量化处理,以将4D张量([batch_size,height,widt…

将numpy数组图像转换为与request.get相同的格式 - python

我有一个http端点,希望我以这种格式发送图像:url = 'https://example_image_url.jpg' img_bytes = requests.get(url).content endpoint.predict(img_bytes) 如果我有一个numpy数组格式的图像,如何将其转换为与上述img_bytes格式相同…

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

如何将枕头EPS调整为JPG品质 - python

我正在尝试使用Pillow将EPS图像转换为JPEG。但是结果质量很差。我正在尝试使用resize方法,但是它被完全忽略了。我将JPEG图像的大小设置为(3600, 4700),但是结果图像的大小为(360, 470)。我的代码是:eps_image = Image.open('img.eps') height = eps_image.h…

用圆和线计算变换 - python

我试图确定两个图像之间的转换(旋转+平移+缩放),以使其移动。图像是用两种不同的方式拍摄的,这些方式会产生非常不同的纹理。所以我不能使用基于维持光流的技术。我认为最好将图像阈值化以提取几何形状(请参见下面的示例)。但是然后我很难看到我能做些什么...也许可以提取垂直线和中心圆来帮助我提取变换。我在python中工作,我研究了Opencv可以提供的功能,但目前…