我正在尝试将以下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附加到byte
,img.putpixel
和ord(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操作? - pythonTensorflow有大量的变换,可以应用于表示图像([高度,宽度,深度])(例如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可以提供的功能,但目前…