将ndarray转换为Base64

时间:2020-03-30 04:22:20

标签: python django image-processing

用户上传图像,如果该用户没有其他图像要上传,则该图像将被保存。然后,我们拍摄该图像,将其切成两半。上半年再次被保存。至于第二个映像,我们需要将其转换为Base64映像。但是,由于某种原因,我收到此错误:ValueError: ndarray is not C-contiguous

img = q.choice_set.all()[0].img
reader = misc.imread(img)
height, width, _ = reader.shape
with_cutoff = width // 2
s1 = reader[:, :with_cutoff]
s2 = reader[:, with_cutoff:]
misc.imsave(settings.MEDIA_ROOT + "/" + img.name, s2)
validated_data["choiceimage"] = base64.b64encode(s2)

将其保存在数据库中时,出现错误。我究竟做错了什么?如何将numpy数组解码为base64?

1 个答案:

答案 0 :(得分:1)

如果您采用2D数组并提取左半部分或右半部分,则它在内存中将不再是连续的-行之间将存在间隙。

x = np.arange(6).reshape(2,3)

给予x

array([[0, 1, 2],
       [3, 4, 5]])

如果将中心列提取到y中:

y = x[:,1:2]

给予y

array([[1],
       [4]])

但是如果我们检查它是否在内存中是连续的:

y.flags['C_CONTIGUOUS']

给予:

False

解决方案是将列提取为连续数组:

y = np.ascontiguousarray(x[:,1:2])
y.flags['C_CONTIGUOUS']

给予:

True
相关问题