TypeError:参数1必须是ImagingCore,而不是ImagingCore [英] TypeError: argument 1 must be ImagingCore, not ImagingCore

查看:231
本文介绍了TypeError:参数1必须是ImagingCore,而不是ImagingCore的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Windows下,我收到此错误.如何修复PIL?

Under the Windows I get this error. How to fix PIL?

这是错误:TypeError:参数1必须是ImagingCore,而不是ImagingCore

This is error: TypeError: argument 1 must be ImagingCore, not ImagingCore

#!/usr/bin/python
## -*- coding: utf-8 -*-

from PIL import Image, ImageFont
import ImageDraw, StringIO, string
from random import *
from math import *

import os
SITE_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))

class Captcha3d(object):

    _hypot = 4
    _xx, _yy = 35, 70
    _CIMAGE = None
    _CHARS = string.ascii_lowercase + string.ascii_uppercase + string.digits
    _TEXT = ''

    def __init__(self):
        self._CIMAGE = Image.new("RGB", (self._yy * self._hypot, self._xx * self._hypot), (255,255,255))
        self.generateCode()
        self.render()

    def imageColorAllocate(self, r,g,b):
        hexchars = "0123456789ABCDEF"
        hexcolor = hexchars[r / 16] + hexchars[r % 16] + hexchars[g / 16] + hexchars[g % 16] + hexchars[b / 16] + hexchars[b % 16]
        return int(hexcolor, 16)

    def generateCode(self):
        chars = self._CHARS
        self._TEXT = "".join(choice(chars) for x in range(randint(3, 3)))

    def getText(self):
        return self._TEXT

    def getProection(self, x1,y1,z1):
        x = x1 * self._hypot
        y = z1 * self._hypot
        z = -y1 * self._hypot

        xx = 0.707106781187
        xy = 0
        xz = -0.707106781187

        yx = 0.408248290464
        yy = 0.816496580928
        yz = 0.408248290464 # 1/sqrt(6)

        cx = xx*x + xy*y + xz*z
        cy = yx*x + yy*y + yz*z + 20*self._hypot

        return [cx, cy]

    def zFunction(self, x,y):
        z = 2.6
        if self._CIMAGE.getpixel((y/2,x/2)) == (0,0,0):
            z = 0
        if z != 0:
            z += float(randint(0,60))/100
        z += 1.4 * sin((x+self.startX)*pi/15) * sin((y+self.startY)*pi/15)
        return z

    def render(self):
        fontSans = ImageFont.truetype(os.path.join(SITE_PATH, "data", "fonts", "FreeSans.ttf"), 14)

        draw = ImageDraw.Draw(self._CIMAGE)

        whiteColor = 'white'
        draw.rectangle([0, 0, self._yy * self._hypot, self._xx * self._hypot], fill=whiteColor)

        #textColor = 'black'
        #imgtext = Image.open("i8n.png")
        #self._CIMAGE.paste(imgtext, (0,0))
        imgtext = Image.new("1", (self._yy * self._hypot, self._xx * self._hypot), (1))
        drawtext = ImageDraw.Draw(imgtext)
        drawtext.text((1,0), self._TEXT, font=fontSans, fill=0)
        self._CIMAGE.paste(imgtext, (0,0))

        #draw.text((2,0), self.text, font=fontSans, fill=textColor)

        self.startX = randint(0,self._xx)
        self.startY = randint(0,self._yy)

        crd = {}

        x = 0
        while x < (self._xx+1):
            y = 0
            while y < (self._yy+1):
                crd[str(x) + '&' + str(y)] = self.getProection(x,y,self.zFunction(x,y))
                y += 1
            x += 1

        x = 0
        while x < self._xx:
            y = 0
            while y < self._yy:
                coord = []
                coord.append((int(crd[str(x) + '&' + str(y)][0]),int(crd[str(x) + '&' + str(y)][1])))
                coord.append((int(crd[str(x+1) + '&' + str(y)][0]),int(crd[str(x+1) + '&' + str(y)][1])))
                coord.append((int(crd[str(x+1) + '&' + str(y+1)][0]),int(crd[str(x+1) + '&' + str(y+1)][1])))
                coord.append((int(crd[str(x) + '&' + str(y+1)][0]),int(crd[str(x) + '&' + str(y+1)][1])))

                c = int(self.zFunction(x,y)*32)
                linesColor = (c,c,c)
                draw.polygon(coord, fill=whiteColor, outline=linesColor)
                #draw.polygon(coord, fill=whiteColor)
                y += 1
            x += 1

        draw.rectangle([0, 0, self._xx, self._yy], fill=whiteColor)

        #draw.text((2,0), self.text, font=fontSans, fill=textColor)
        #imageString($this->image, 1, 3, 0, (microtime(true)-$this->time), $textColor);

        del draw
        #self._CIMAGE.save("image.png", "PNG")
        return [self._CIMAGE, self._TEXT]

def main():
    a = Captcha3d()
    print a.getText()

if __name__ == '__main__':
    main()

推荐答案

我也发生在OSX 10.6.8,Python 2.6.5上.我认为某些类被动态导入两次.

Also happens for me on OSX 10.6.8, Python 2.6.5. I think some class is getting dynamically imported twice.

尝试更改

from PIL import Image, ImageFont

import Image, ImageFont

对我有用.

这篇关于TypeError:参数1必须是ImagingCore,而不是ImagingCore的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆