这是一项任务,自从我刚开始使用python编程时,我就付出了很大的努力:
我正在运行以下函数,它以图像和短语(空格将被移除,所以只是文本)作为参数,我已经获得了所有的导入和预处理代码,我只需要实现这个函数。我只能使用get像素、put像素、load和save。这就是为什么编写代码对我来说是一项艰巨的任务。
def InsertoImage(srcImage, phrase):
pix = srcImage.load()
for index,value in enumerate(phrase):
pix[10+index,15] = phrase[index]
srcImage.save()
pass 此代码提供“系统错误”,“新样式getargs格式,但参数不是元组”。
编辑:
C:\Users\Nave\Desktop\a1>a1_template.py lolmini.jpg Hi
Traceback (most recent call last):
File "C:\Users\Nave\Desktop\a1\a1_template.py", line 31, in <module>
doLOLImage(srcImage, phrase)
File "C:\Users\Nave\Desktop\a1\a1_template.py", line 23, in doLOLImage
pix[10+index,15] = phrase[index]
SystemError: new style getargs format but argument is not a tuple 编辑:
好的,谢谢,我理解并张贴了代码,但是if语句出错了,不确定if语句为什么不能工作,下面是完整的代码,抱歉之前没有完全添加它:
来自未来的导入部门
字母、数字和点位是字典映射(大写)。
字符到表示该字符的图像
注:没有空格字符存储!
从imageproc导入字母、数字、标点符号、preProcess
这是要实现的功能。
def InserttoImage(srcImage,短语):
pix = srcImage.load() for index,value in enumerate(phrase): if value in letters: pix[10+index, 15] = letters[value] elif value in numbers: pix[10+index, 15] = numbers[value] elif value in punctuation: pix[10+index, 15] = punctuation[value] srcImage.save() pass 当命令行通过以下方式调用此脚本时,将执行此代码:
‘'python .py’
如果将 ==命名为“main”:
srcImage, phrase = preProcess() InserttoImage(srcImage, phrase) 感谢、字母、数字和标点符号都是字典,它们可以看到关键元素并打开图像(字体)。但是pix10+index仍然存在一个问题,因为它会产生错误:
pix[10+index, 15] = letters[value] SystemError:新样式getargs格式,但参数不是元组
发布于 2010-08-24 03:29:41
你似乎混淆了两个非常不同的概念。根据您发布的示例代码,让我们假设:
srcImage =由lolmini.jpg生成的Python映像。
phrase =字符串,'Hi‘。
您正在尝试让phrase以写在srcImage上的文本形式出现。当前的代码显示,您计划通过访问图像的单个像素并为它们分配一个字母来完成此操作。
这不起作用的原因有几个。小学二年级是:
Hi文本到底是什么样子的?当你想象它写在图像的顶部时,字母会变薄吗?它们的大小不同吗?它们又厚又粗吗?斜体?它们看起来像手写的吗?这些都是字体 face的属性。目前,您的程序不知道这些字母应该是什么样子。你需要给你的程序一个字体的名称,以便它知道如何将字母从phrase到图像。附带了一个专门用于帮助您绘制字体的模块。它的文件如下:
ImageFont模块
您的代码显示,您对每个字母进行正确的循环,将其放在图像中,并增加x值,这样下一个字母就不会重叠。但是,您不需要使用图像的像素,而是需要加载字体并使用上面链接库中显示的方法将它们绘制到图像上。
如果您查看链接文档中的draw.text()函数,您将看到实际上可以跳过遍历每个字母的需要,而是传递要在图像上使用的整个字符串。
我本可以添加示例代码,但由于这是一项家庭作业,我故意遗漏了任何内容。有了链接的文档和现有的代码,希望您在完成过程中不会遇到任何困难。
编辑
只需将您的评论读到另一个答复,说明只允许您使用getpixel()和putpixel()绘制源图像。如果确实是这样的话,您的工作量就会成倍增长。
我上面的评论-一个像素将不能代表一个字母。假设不允许使用任何外部源代码,则需要创建包含多个像素位置的数据结构,然后所有像素都绘制在特定位置,以表示特定的字母。
然后,您需要对您想要支持的每一封信都这样做。
如果你能逐字附上作业的案文,我认为这将有助于在座的人更好地理解你的所有限制。
发布于 2010-08-24 02:46:21
实际上,在进一步阅读时,我认为问题在于,您正在尝试将字符值赋给像素。你必须想出一种方法来在图像上(以及在图像边界内)实际绘制字符。
此外,作为附带说明,由于您正在使用索引,枚举(短语)中的值:
可以使用值而不是短语索引。
发布于 2010-08-24 04:05:59
我对一般问题的建议是在已知坐标(上、下、左、右)创建一个包含所有字符的图像,然后将字符图像的适当部分转移到新的输出图像中。
https://stackoverflow.com/questions/3553088
复制相似问题