Python PIL.Image 模块,PERSPECTIVE 实例源码
我们从Python开源项目中,提取了以下9个代码示例,用于说明如何使用PIL.Image.PERSPECTIVE。
def call(self, img):
if img is None:
raise ValueError('img is None')
width, height = img.size
sym = img.copy()
symmetry = False
if random() < self.proba:
from_points = [(0, 0), (width-1, height-1), (0, height-1)]
new_points = [(width-1, height-1)]
coeffs = find_coeffs(new_points, from_points)
sym = sym.transform((width, height), Image.PERSPECTIVE, coeffs, Image.BICUBIC)
symmetry = True
return sym, symmetry
def get(self):
if self.draw_lines:
self._create_lines()
if self.draw_points:
self._create_points()
code_str = self._create_code_str()
# ??????
params = [1 - float(random.randint(1, 2)) / 100,
0,
1 - float(random.randint(1, 10)) / 100,
float(random.randint(1, 2)) / 500,
0.001, 2)) / 500
]
img = self.img.transform(self.size, params) # ????
img = img.filter(ImageFilter.EDGE_ENHANCE_MORE) # ?????????????
return img, code_str
def create_perspective(img, factor):
img_size = img.size
w = img_size[0]
h = img_size[1]
shifts = generate_random_shifts(img_size, factor)
coeffs = find_coeffs(
[(shifts[0][0], shifts[0][1]),
(w + shifts[1][0], shifts[1][1]),
(w + shifts[2][0], h + shifts[2][1]),
(shifts[3][0], h + shifts[3][1])], [(0, (w, h), h)])
return img.transform((w, Image.BICUBIC)
# due to rotation and/or perspective we will need to fill in the background
def sample_patch_perspective(image, inv_xform_3x3, patch_size):
""" return an Image of size patch_size """
patch_size_tuple = (patch_size[0], patch_size[1])
inv_xform_array = inv_xform_3x3.reshape(9,) / inv_xform_3x3[2,2]
patch = image.transform(patch_size_tuple, inv_xform_array, Image.NEAREST)
ones_img = Image.new('L', image.size, 255)
mask = ones_img.transform(patch_size_tuple, Image.NEAREST)
return patch, mask
def create_validate_code(self,
size=(120, 30),
chars=init_chars,
img_type="GIF",
mode="RGB",
bg_color=(255, 255, 255),
fg_color=(0, 0,
font_size=18,
font_type=fontType,
length=4,
draw_lines=True,
n_line=(1, 2),
draw_points=True,
point_chance=2):
width, height = size
img = Image.new(mode, size, bg_color)
draw = ImageDraw.Draw(img)
if draw_lines:
self.create_lines(draw, n_line, width, height)
if draw_points:
self.create_points(draw, point_chance, height)
strs = self.create_strs(draw, chars, length, font_type, font_size,
width, height, fg_color)
params = [1 - float(randint(1,
1 - float(randint(1, float(randint(1, 2)) / 500]
img = img.transform(size, params)
img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)
return img, strs
def call(self, height = img.size
from_points = [(0, height-1)]
new_points = [(self.new_width-1,
(self.new_width+self.new_width-1,
(self.new_width*2+self.new_width-1, self.new_height-1),
(0, self.new_height-1)]
coeffs = find_coeffs(new_points, from_points)
img = img.transform((self.new_width+self.new_width*2, self.new_height),
Image.PERSPECTIVE, Image.BICUBIC)
return img
def code_img(code, size):
r = Random()
code = code
len_code = len(code)
font = ImageFont.truetype("Essence_Sans.ttf", size)
font_width, font_height = font.getsize(code)
font_width += size / 2
print font_width, font_height
img = Image.new("RGBA", (font_width, font_height), (255,) * 4)
draw = ImageDraw.ImageDraw(img)
draw.text((size/10, -size/10), code, font=font, fill=(0, 0))
params = [1,
0,
1 - float(r.randint(1,
0.001,
float(r.randint(1, 2)) / 500
]
print params
img = img.transform((font_width, params)
img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)
img.save("test.jpg")
def draw_picture(img_src):
fap_path = os.path.join(os.path.dirname(__file__), "fap.png")
# ?????????? ????????
response = requests.get(img_src)
response.raise_for_status()
image_bytes = io.BytesIO(response.content)
# ?????????
image = Image.open(image_bytes)
fap_pic = Image.open(fap_path)
if image.mode != 'RGBA':
image = image.convert('RGBA')
image_width, image_height = image.size
fap_width, fap_height = fap_pic.size
def find_coeffs(pa, pb):
""" https://stackoverflow.com/questions/14177744/
????? ????????? ????,??? ??????? - ???????
"""
matrix = []
for p1, p2 in zip(pa, pb):
matrix.append([p1[0], p1[1], 1, -p2[0]*p1[0], -p2[0]*p1[1]])
matrix.append([0, p1[0], -p2[1]*p1[0], -p2[1]*p1[1]])
A = numpy.matrix(matrix, dtype=numpy.float)
B = numpy.array(pb).reshape(8)
res = numpy.dot(numpy.linalg.inv(A.T * A) * A.T, B)
return numpy.array(res).reshape(8)
trans_coeff = find_coeffs(
[(217,111),(412,115),(222,372),(403,371)],
[(0,0), (image_width-1,image_height-1), image_height-1)])
resp_pic = image.transform(fap_pic.size, trans_coeff, Image.BILINEAR)
# ??????????? gesture ? image
resp_bytes = io.BytesIO()
Image.alpha_composite(resp_pic, fap_pic).save(resp_bytes, format='PNG')
resp_bytes.seek(0)
return resp_bytes
def create_validate_code(size=(120,
chars=init_chars,
img_type="GIF",
mode="RGB",
bg_color=(245, 245, 245),
fg_color=color_random,
font_size=24,
font_type=fontType,
length=4,
draw_lines=True,
n_line=(1,
draw_points=True,
point_chance=2):
'''
@todo: ???????
@param size: ?????????????????(120,30)
@param chars: ?????????????
@param img_type: ???????????GIF?????GIF?JPEG?TIFF?PNG
@param mode: ????????RGB
@param bg_color: ??????????
@param fg_color: ?????????????????#0000FF
@param font_size: ???????
@param font_type: ????????? ae_Alarabiya.ttf
@param length: ???????
@param draw_lines: ??????
@param n_lines: ?????????????????(1,2)???draw_lines?True???
@param draw_points: ??????
@param point_chance: ?????????????[0,100]
@return: [0]: PIL Image??
@return: [1]: ??????????
'''
width, height = size # ?? ?
img = Image.new(mode, bg_color) # ????
draw = ImageDraw.Draw(img) # ????
if draw_lines:
create_lines(draw, height)
if draw_points:
create_points(draw, height)
strs = create_strs(draw, fg_color())
# ??????
params = [1 - float(random.randint(1,
1 - float(random.randint(1,
float(random.randint(1, 2)) / 500
]
img = img.transform(size, params) # ????
img = img.filter(ImageFilter.EDGE_ENHANCE_MORE) # ?????????????
return img, strs
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。