我在python中将图像转换为base64字符串,将其转换为列表,更改几个字符并将base64字符串转换回图像。
这样做的目的是创建故障艺术,图像编码中的微小变化可以产生某些效果。
这就是我的代码:
import base64
import random
import string
times = 0
with open(r"C:\Users\Justin\Desktop\image.jpg", "rb") as image:
text = base64.b64encode(image.read())
text = str(text)
text = list(text)
char_no = len(text)
while True:
crpt_amn = input("how much do you want to corrupt the image? insert a value from 0 to " + str(char_no) + " ")
try:
if int(crpt_amn) < 0:
print("value is out of range!")
elif int(crpt_amn) > char_no:
print("value is out of range!")
else:
break
except ValueError:
print("that isn't a number")
while times < (int(crpt_amn) + 1):
picked = random.randint(0, char_no)
if text[picked] == '/':
times += 1
else:
text[picked] = random.choice(string.ascii_letters)
times += 1
text = ''.join(text)
text = str.encode(text)
text = base64.b64decode(text)
filename = "out_img.jpg"
with open(filename, "wb") as picture:
picture.write(text)
但是,将text
转换为str(text)
至str.encode(text)
并返回base64.b64decode(text)
似乎存在问题,因为输出图像无法打开。
对base64字符串所做的更改是微不足道的,即使您将crypt_amn
设置为0,这样也不会对其进行任何更改,输出图像仍然无法打开。
我试图摆脱整个腐败部分并将代码剥离到这一点:
import base64
import random
import string
with open(r"C:\Users\Justin\Desktop\image.jpg", "rb") as image:
text = base64.b64encode(image.read())
text = str(text)
text = str.encode(text)
text = base64.b64decode(text)
filename = "out_img.jpg"
with open(filename, "wb") as picture:
picture.write(text)
但输出图像仍然无法打开。
有没有办法实现所需的功能,用户可以将base64字符串编辑为列表?
谢谢!
(对不起,如果我的某些术语有问题,或者我的问题看起来很荒谬,我仍然是python的初学者)