Ejemplo n.º 1
0
    def opaque_rectangle(self,
                         x,
                         y,
                         width,
                         height,
                         fill="#000000",
                         opacity=128,
                         pattern=False):
        LOGGER.debug("Draw opaque rectangle (%s, %s) - (%s, %s)" %
                     (x, y, width, height))
        color_layer = Image.new("RGBA", self.image.size, fill)
        alpha_mask = Image.new("L", self.image.size, 0)
        alpha_mask_draw = ImageDraw.Draw(alpha_mask)
        alpha_mask_draw.rectangle((x, y, x + width, y + height),
                                  opacity)  # Opacity here?
        self._init_image(Image.composite(color_layer, self.image, alpha_mask))
        if pattern:
            pat_mask = Image.new("L", (width, height), 0)
            pat_mask_draw = ImageDraw.Draw(pat_mask)

            pattern_size = 8
            offset = 14

            line_offset = -pattern_size
            while line_offset < width:
                pat_mask_draw.line((line_offset + 20, -pattern_size,
                                    line_offset, height + pattern_size), 40,
                                   pattern_size)
                line_offset += pattern_size + offset
            final_mask = Image.new("L", self.image.size, 0)
            final_mask.paste(pat_mask, (x, y, x + width, y + height))

            white = Image.new("RGBA", self.image.size, "#FFFFFF")
            self._init_image(Image.composite(white, self.image, final_mask))
Ejemplo n.º 2
0
def render_hex_body(terr_file, border_left_file, border_right_file):
	terr_code=terr_file.split('.')[0]
	left_code=border_left_file.split('.')[0]
	right_code=border_right_file.split('.')[0]
	file_name="middle_T."+terr_name+".B1."+left_code+".B2."+right_code+".png"
	if (not os.path.isfile(file_name)):
		terr=Image.open(get_terrain_piece(terr_file,"M"))
		left=Image.open(get_border(border_left_file,'L'))
		right=Image.open(get_border(border_right_file,'R'))
		largest=None
		images=[terr,left,right]
		for i in images:
			if i.size > largest:
				largest=i.size
		
		if (terr.size<largest):
			terr=terr.resize(largest,Image.BICUBIC)
		if (left.size<largest):
			left=left.resize(largest,Image.BICUBIC)
		if (right.size<largest):
			right=right.resize(largest,Image.BICUBIC)
		
		terr=Image.composite(left,terr,left)
		terr=Image.composite(right,terr,right)
		terr.save(file_name)
	return file_name
		
Ejemplo n.º 3
0
def generateActivatedItemIcons():
    icons = [ f for f in listdir("icons_activated/") if isfile(join("icons_activated/",f)) and f.split(".")[-1] == "png" ]
    
    for i in icons:
        filename = ".".join(i.split(".")[0:-1])
        
        im = Image.open("icons_activated/"+i).convert("RGBA")
        color_layer = Image.new('RGBA', im.size, (0, 0, 0))
        
        line_layer = Image.new('RGBA', im.size, (109, 109, 109))
        alpha_mask = Image.new('L', im.size, 0)
        alpha_mask_draw = ImageDraw.Draw(alpha_mask)
        alpha_mask_draw.line([(im.size[0]//2, im.size[1]//2), (im.size[0]//2, 0)], fill=186, width = 3)
        
        newim = Image.blend(im, color_layer, 0.51)
        newim = Image.composite(line_layer, newim, alpha_mask)
        newim.save("icons_activated/"+filename+"-activated.png")
        
        newim = Image.blend(im, color_layer, 0.29)
        newim = Image.composite(line_layer, newim, alpha_mask)
        newim.save("icons_activated/"+filename+"-activated-done.png")
        
        rect_layer = Image.new('RGBA', im.size, (0, 0, 0))
        rect_alpha_mask = Image.new("L", im.size, 0)
        rect_alpha_mask_draw = ImageDraw.Draw(rect_alpha_mask)
        rect_alpha_mask_draw.rectangle((0, 0, im.size[0]//2, im.size[1]), fill=131)
        rect_alpha_mask_draw.rectangle((im.size[0]//2+1, 0, im.size[0], im.size[1]), fill=75)
        
        newim = Image.composite(rect_layer, im, rect_alpha_mask)
        newim = Image.composite(line_layer, newim, alpha_mask)
        newim.save("icons_activated/"+filename+"-activated-half.png")
Ejemplo n.º 4
0
def text_watermark(source_file,
                   out_base_path='.',
                   text='@Grayson',
                   angle=23,
                   opacity=0.50):
    '''''
    添加一个文字水印,做成透明水印的模样,应该是png图层合并
    http://www.pythoncentral.io/watermark-images-python-2x/
    这里会产生著名的 ImportError("The _imagingft C module is not installed") 错误
    Pillow通过安装来解决 pip install Pillow
    '''
    img = Image.open(source_file)
    # watermark = Image.new('RGBA', img.size, (255, 255, 255))  # 我这里有一层白色的膜,去掉(255,255,255) 这个参数就好了
    watermark = Image.new('RGBA',
                          img.size)  # 我这里有一层白色的膜,去掉(255,255,255) 这个参数就好了

    # FONT = abspath + "/fonts/NewYork.ttf"
    FONT = "../../fonts/NewYork.ttf"
    size = 1

    n_font = ImageFont.truetype(FONT, size)  # 得到字体
    n_width, n_height = n_font.getsize(text)
    text_box = min(watermark.size[0], watermark.size[1]) / 4
    print(text_box)
    # text_box = 300
    while (n_width + n_height < text_box):
        size += 2
        n_font = ImageFont.truetype(FONT, size=size)
        n_width, n_height = n_font.getsize(text)  # 文字逐渐放大,但是要小于图片的宽高最小值

    # text_width = (watermark.size[0] - n_width) / 2
    text_width = (watermark.size[0] - n_width)
    # text_height = (watermark.size[1] - n_height) / 2
    text_height = (watermark.size[1] - n_height)
    # watermark = watermark.resize((text_width,text_height), Image.ANTIALIAS)
    print(text_width, text_height)
    draw = ImageDraw.Draw(watermark, 'RGBA')  # 在水印层加画笔
    delta_right = -text_width / 9  # 字体与右侧的距离
    delta_bottom = -text_height / 24  # 字体与底部的距离
    draw.text((delta_right + text_width, delta_bottom + text_height),
              text,
              font=n_font,
              fill="#ffffff")
    # watermark = watermark.rotate(angle, Image.BICUBIC)
    alpha = watermark.split()[3]
    alpha = ImageEnhance.Brightness(alpha).enhance(opacity)
    watermark.putalpha(alpha)
    str_uuid = ''.join(str(uuid.uuid4()).split('-'))
    splits = source_file.split('.')
    image_suffix = splits[len(splits) - 1]
    out_file = out_base_path + '/' + str_uuid + '.' + image_suffix
    print(out_file)
    Image.composite(watermark, img, watermark).save(out_file, image_suffix)
    print(u"文字水印成功")
    return str_uuid
Ejemplo n.º 5
0
 def watermark(self, image):
     """ Apply a watermark to an image """
     mark = Image.open(watermark_img)
     im = Image.open(image)
     if im.mode != 'RGBA':
         im = im.convert('RGBA')
     layer = Image.new('RGBA', im.size, (0,0,0,0))
     position = (im.size[0] - mark.size[0], im.size[1] - mark.size[1])
     layer.paste(mark, position)
     outfile = join(out, basename(image))
     Image.composite(layer, im, layer).save(outfile)
     return outfile
Ejemplo n.º 6
0
 def watermark(self, image):
     """ Apply a watermark to an image """
     mark = Image.open(watermark_img)
     im = Image.open(image)
     if im.mode != 'RGBA':
         im = im.convert('RGBA')
     layer = Image.new('RGBA', im.size, (0, 0, 0, 0))
     position = (im.size[0] - mark.size[0], im.size[1] - mark.size[1])
     layer.paste(mark, position)
     outfile = join(out, basename(image))
     Image.composite(layer, im, layer).save(outfile)
     return outfile
Ejemplo n.º 7
0
def batch(infolder, outfolder, watermark):
    mark = Image.open(watermark)
    for root, dirs, files in os.walk(infolder):
        for name in files:        try:
            im = Image.open(join(root, name))
            if im.mode != 'RGBA':
                im = im.convert('RGBA')
            layer = Image.new('RGBA', im.size, (0,0,0,0))
            position = (im.size[0]-mark.size[0], im.size[1]-mark.size[1])
            layer.paste(mark, position)
            Image.composite(layer, im, layer).save( join(outfolder, name))
        except Exception, (msg):
            print msg
Ejemplo n.º 8
0
def clearRed(img):
    
    source = img.split()
    
    red_mask = source[0].point(lambda i: i > 130 and 255)
    blue_mask = source[2].point(lambda i:i < 50 and 80)
    green_mask = source[1].point(lambda i: i < 50 and 80)

    imgR = Image.composite(source[0], img, red_mask)
    imgB = Image.composite(source[2], imgR, blue_mask)
    imgG = Image.composite(source[1], imgB, green_mask)
   
    return imgG
Ejemplo n.º 9
0
def render_hex_corner(top_terr_file, bottom_terr_file, is_forward_slash, border_file):
	top_code=top_terr_file.split('.')[0]
	bottom_code=bottom_terr_file.split('.')[0]
	border_code=border_file.split('.')[0]
	
	if is_forward_slash:
		corner_type = "F"
		upper_type = "UL"
		lower_type = "LR"
	else:
		corner_type = "B"
		upper_type = "UR"
		lower_type = "LL"

	file_name="corner_T1."+top_code+'.T2.'+bottom_code+'.B.'+border_code+'_'+corner_type+'.png'
	if (not os.path.isfile(file_name)):
		top_terr=Image.open(get_terrain_piece(top_code,upper_type))
		if top_terr.mode!='RGBA':
			top_terr=top_terr.convert('RGBA')
		bottom_terr=Image.open(get_terrain_piece(bottom_code,lower_type))
		if bottom_terr.mode!='RGBA':
			bottom_terr=bottom_terr.convert('RGBA')
		if (top_terr.size!=bottom_terr.size):
			if (top_terr.size[0]*top_terr.size[1] > bottom_terr.size[0]*bottom_terr.size[1]):
				bottom_terr=bottom_terr.resize(top_terr.size,Image.BICUBIC)
			else:
				top_terr=top_terr.resize(bottom_terr.size,Image.BICUBIC)
		mask=Image.new("1", top_terr.size)
		mask_draw=ImageDraw.Draw(mask)
		if is_forward_slash:
			mask_draw.polygon(((0,0),(0,mask.size[1]),(mask.size[0],0)), fill=1)
		else:
			mask_draw.polygon(((0,0),(mask.size[0],mask.size[1]),(mask.size[0],0)), fill=1)
		corner=Image.composite(top_terr,bottom_terr,mask)
		
		#border image must have transparency, 'cause I'm lazy.
		border=Image.open(get_border(border_code,corner_type))
		if border.mode!='RGBA':
			border=border.convert('RGBA')
		if (corner.size!=border.size):
			if (corner.size[0]*corner.size[1] > border.size[0]*border.size[1]):
				border=border.resize(corner.size,Image.BICUBIC)
			else:
				corner=corner.resize(border.size,Image.BICUBIC)
		print "First composite done.  top_terr size:"+str(top_terr.size)+"  bottom_terr size:"+str(bottom_terr.size)+"   mask size:"+str(mask.size)+"   corner size:"+str(corner.size)+"  border size:"+str(border.size)
		corner=Image.composite(border,corner,border)
		corner.save(file_name, palette=Image.ADAPTIVE)
		print "Palettes.  top:"+top_terr.mode+"  bottom:"+bottom_terr.mode+"  mask:"+mask.mode+"  border:"+border.mode+"  corner:"+corner.mode

	return file_name
Ejemplo n.º 10
0
  def captcha(self, guess):
    font = self._get_captcha_font()
    if self.plazma_cache['reusage'] <= -5:
      self._init_cache()
    self.plazma_cache['reusage'] -= 1
    mask = Image.new('RGBA', (self.plazma_cache['size'][0], self.plazma_cache['size'][1]))
    font_width, _ = font.getsize(guess)
    font_width /= len(guess)

    x_offset = random.randint(-1, 1) * 5

    draw = ImageDraw.Draw(mask)
    for i in guess:
      x_offset += font_width + random.randint(1, 5)
      y_offset = random.randint(1, 7) * 5
      draw.text((x_offset + random.randint(-(font_width / 10), (font_width / 10)) * 2, y_offset), i, font=font)

    angle = random.randint(-2, 3) * 5
    mask = mask.rotate(angle)

    pattern_1 = pattern_2 = None
    while pattern_1 is pattern_2:
      pattern_1 = self.plazma_cache['plazma'][random.randint(0, self.plazma_cache_size - 1)]
      pattern_2 = self.plazma_cache['plazma'][random.randint(0, self.plazma_cache_size - 1)]

    result = Image.composite(pattern_1, pattern_2, mask)

    if self._filter is not None:
      for _ in range(self._diff_mode):
        result = result.filter(self._filter)
    return result
Ejemplo n.º 11
0
    def draw_func(self, fobj):

        """Draws a function on the graph image using image compositing.

        The function must have a value method (Points instances work)."""

        eq = getattr(fobj, "eq", "=")  # Check equality
        curve_img = Image.new("RGBA", (self.width, self.height), (0, 0, 0, 0))
        cpix, fpcolor, pthick = curve_img.load(), fobj.pcolor, fobj.pthick
        if not isinstance(pthick, list):  # Square point
            pthick = [pthick]

        if "=" in eq:
            for px in xrange(self.width - 1):  # Iterate over all columns
                yvals = fobj(round(self.coord(px)[0], self.round), self.gvars)
                if yvals is None:
                    continue
                if not isinstance(yvals, list):  # For single points
                    yvals = [yvals]

                for yval in yvals:
                    py = self.pixel(y=yval)[1]
                    for ppx, ppy in self.pad_point(px, py, *pthick):
                        if ((0 <= ppx < self.width) and
                           (0 <= ppy < self.height)):
                            cpix[ppx, ppy] = fpcolor

            self.gimg = Image.composite(curve_img, self.gimg, curve_img)
            self.gimg.save(self.fname)

        if "<" in eq:
            self.shade_between(fobj, self.bot_axis)
        elif ">" in eq:
            self.shade_between(fobj, self.top_axis)
Ejemplo n.º 12
0
def start():
    getdir(picdir)
    for tex in imglist:
        if tex.endswith('.jpg') or tex.endswith('.jpeg') or tex.endswith('.png')or tex.endswith('.JPG') or tex.endswith('JPEG') or tex.endswith('PNG'):
            dir=picdir
            fname = dir+"\\"+tex
            im2 = Image.open(fname)
            tex = tex.replace('.jpg', '')
            tex = tex.replace('.jpeg', '')
            tex = tex.replace('.png', '')
            tex = tex.replace('.JPG', '')
            tex = tex.replace('.JPEG', '')
            tex = tex.replace('.PNG', '')
            tex = tex.split('-')
            media = tex[0]
            title = tex[1]
            global t
            if title in t:
                continue
            im1=imdic.get(media)
            im3 = im2.resize((592, 296))
            if im1==None:
                b="\n"+title+" 出现了问题\n"
                text.insert(Tkinter.END,b.decode('gbk'))
                continue
            layer = Image.new('RGBA', im1.size, (0, 0, 0, 0))
            layer.paste(im3, (0, 204))
            im4 = Image.composite(layer, im1, layer)
            if not os.path.exists(desk+r'\带logo的图片'):
               os.makedirs(desk+r'\带logo的图片')
            out=desk+r'\带logo的图片'
            im4.save(os.path.join(out,title+".jpg"),quality=100)
            t.extend([title])
            a=title+" 处理成功 "
            text.insert(Tkinter.END,a.decode('gbk'))
Ejemplo n.º 13
0
	def get_location_piece(img_set, stack,part):
		

		
	#file format: location_t1.t2.tN_part.png
	file_name = "location_"
	is_first=True
	for loc in stack:
		if is_first:
			is_first=False
		else:
			file_name+='.'
		file_name+=loc
	file_name+='_'+part+'.png'
	Logger.log.debug('get_location_piece filename: '+file_name)
	if not os.path.isfile(os.path.join(Context.terrain_dir, img_set, "split", file_name)):
		terrain=Image.new("RGBA",(1,1))
		for loc in stack:
			terr = Image.open(os.path.join(Context.terrain_dir, get_terrain_piece(img_set, loc, part)))
			if terr.mode!="RGBA":
				terr=terr.convert("RGBA")
			if terrain.size==(1,1):
				terrain=terr
			else:
				if terr.size > terrain.size:
					terrain.resize(terr.size,Image.BICUBIC)
				elif terr.size < terrain.size:
					terr.resize(terrain.size,Image.BICUBIC)
				terrain=Image.composite(terr,terrain,terr)
		terrain.save(os.path.join(Context.terrain_dir, img_set, "cache", file_name))
	return file_name
Ejemplo n.º 14
0
def generate_diff(img1, img2):
    _img1 = Image.open(img1)
    _img2 = Image.open(img2)
    #return ImageChops.blend(_img1, _img2, 0.5)
    #return ImageChops.difference(_img1, _img2)
    bld = Image.blend(_img1, _img2, 0.5)
    return Image.composite(_img1, _img2, bld)
Ejemplo n.º 15
0
def add_watermark_image(im,
                        mark,
                        position_x,
                        position_y,
                        mode=None,
                        opacity=1):
    """Adds a watermark to an image."""
    if opacity < 1:
        mark = reduce_opacity(mark, opacity)
    if im.mode != 'RGBA':
        im = im.convert('RGBA')
    # create a transparent layer the size of the image and draw the
    # watermark in that layer.
    layer = Image.new('RGBA', im.size, (0, 0, 0, 0))
    if mode == 'tile':
        for y in range(0, im.size[1], mark.size[1]):
            for x in range(0, im.size[0], mark.size[0]):
                layer.paste(mark, (x, y))
    elif mode == 'scale':
        # scale, but preserve the aspect ratio
        ratio = min(
            float(im.size[0]) / mark.size[0],
            float(im.size[1]) / mark.size[1])
        w = int(mark.size[0] * ratio)
        h = int(mark.size[1] * ratio)
        mark = mark.resize((w, h))
        layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2))
    else:
        layer.paste(mark, (position_x, position_y))
    # composite the watermark with the layer
    return Image.composite(layer, im, layer)
Ejemplo n.º 16
0
def icons(request, project_name):
    try:
        get = request.GET
        color = get['color'].split('/')[-1]
    except:
        return HttpResponseNotFound()

    cache = "%s/cache/%s_icons.png" % (settings.DATA_DIR, color)
    if os.path.isfile(cache):
        response = HttpResponse(mimetype="image/png")
        cache = open(cache, 'r')
        response.write(cache.read())
        cache.close()
        return response

    try:
        im = Image.open("%s/icons_mask.png" % settings.ICONS_DIR)
    except:
        return HttpResponseNotFound()

    bg = Image.new('RGB', im.size, color)
    tr = Image.new('RGBA', im.size, (0, 0, 0, 0))
    result = Image.composite(bg, tr, im)
    response = HttpResponse(mimetype="image/png")
    result.save(cache)
    result.save(response, 'PNG')
    return response
Ejemplo n.º 17
0
def apply_watermark(im, mark, position, opacity=1):
    """Adds a watermark to an image."""
    if opacity < 1:
        mark = reduce_opacity(mark, opacity)
    if im.mode != 'RGBA':
        im = im.convert('RGBA')
    # create a transparent layer the size of the image and draw the
    # watermark in that layer.
    layer = Image.new('RGBA', im.size, (0,0,0,0))
    if position == 'tile':
        for y in range(0, im.size[1], mark.size[1]):
            for x in range(0, im.size[0], mark.size[0]):
                layer.paste(mark, (x, y))
    elif position == 'scale':
        # scale, but preserve the aspect ratio
        ratio = min(
            float(im.size[0]) / mark.size[0], float(im.size[1]) / mark.size[1])
        w = int(mark.size[0] * ratio)
        h = int(mark.size[1] * ratio)
        mark = mark.resize((w, h))
        layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2))
    else:
        if im.size[0] > mark.size[0] or im.size[1] > mark.size[1]:
            position=tuple(map(int,position[1:-1].split(',')))
            #position=((im.size[0] - mark.size[0]+position[0]) , (im.size[1] - mark.size[1] + position[1]))
            position=tuple(map(lambda x,y,p:p if p>0 else x-y+p, im.size,mark.size, position))
            layer.paste(mark, position)
    # composite the watermark with the layer
    return Image.composite(layer, im, layer)
Ejemplo n.º 18
0
def water_mark(img_data, opacity=1):
    img  = Image.open(StringIO(img_data))
    mark = Image.open('/mark/path') # 水印文件可以使用指定路径
    #mark = fs.get(mark_url)
    if not mark:
        return img_data
    mark = Image.open(StringIO(mark))
    if opacity < 1:
        mark = reduce_opacity(mark, opacity)
    if img.mode != 'RGBA':
        img = img.convert('RGBA')
        img_format = 'JPEG'
    else:
        img_format = 'PNG'
    # 指定上传图片最大宽度580和高宽600,如超过进行resize
    if img.size[0] > 580:
        img = img.resize((580, img.size[1]/(img.size[0]/580.0)), resample=1)
    if img.size[1] > 600:
        img = img.resize((img.size[0]/(img.size[1]/600.0),600), resample=1)
    layer = Image.new('RGBA', img.size, (0,0,0,0))
    layer.paste(mark, mark_layout(img, mark, layout))
    img = Image.composite(layer, img, layer)
    new_img = StringIO()
    img.save(new_img, img_format, quality=100)
    return new_img.getvalue()
Ejemplo n.º 19
0
def draw_caption(img, text, outline=2, top=False):
	text_img = Image.new('RGBA', img.size, (0, 0, 0, 0))
	draw = ImageDraw.Draw(text_img)
	w = img.size[0]
	s = 100
	while w >= (img.size[0] - 20):
		font = ImageFont.truetype('HelveticaNeue-CondensedBlack', s)
		w, h = draw.textsize(text, font=font)
		s -= 1
		if s <= 12: break
	text_y = 0 if top else img.size[1] - h
	draw.text((10, text_y), text, font=font, fill='black')
	kernel = [0, 1, 2, 1, 0,
	          1, 2, 4, 2, 1,
	          2, 4, 0, 4, 1,
	          1, 2, 4, 2, 1,
	          0, 1, 2, 1, 0]
	myfilter = ImageFilter.Kernel((5, 5), kernel, scale = 0.25 * sum(kernel))
	for i in xrange(outline):
		print 'Processing image... ' + str(int(float(i)/outline * 100)) + '%'
		text_img = text_img.filter(myfilter)
	print 'Processing done.'
	draw = ImageDraw.Draw(text_img)
	draw.text((10, text_y), text, font = font, fill = 'white')
	mask_img = ImageChops.invert(text_img)
	result_img = Image.composite(img, text_img, mask_img)
	return result_img
Ejemplo n.º 20
0
def draw_image(floor, size, zones, count):
    assert floor in ["top", "middle", "bottom"]
    assert size in ["big", "small"]
    
    zone_coords = data[size + "_" + floor]
    
    for zone in zones:
        assert zone in zone_coords
    
    base_layer = Image.open("Original/%s_%s.png" % (floor, size))
    color_layer = Image.new('RGBA', base_layer.size, "#ff0000")
    alpha_mask = Image.new('L', base_layer.size, 0)
    alpha_mask_draw = ImageDraw.Draw(alpha_mask)
    for zone in zones:
        coords = zone_coords[zone]
        alpha_mask_draw.polygon(coords, fill=128)
    base_layer = Image.composite(color_layer, base_layer, alpha_mask)
    if count >= 1:
        try:
            for file in glob.glob("/media/ram/alarm/%s_%s_*.png" % (floor, size)):
                if file != "/media/ram/alarm/%s_%s_%s.png" % (floor, size, count):
                    os.remove(file)
        except:
            pass
    base_layer.save("/media/ram/alarm/%s_%s_%s.png" % (floor, size, count), "PNG")
Ejemplo n.º 21
0
    def save(self):

        import Image
        import ImageDraw

        im = Image.new("RGBA", (self.w * SCALE, self.h * SCALE))

        draw = ImageDraw.Draw(im)
        draw.rectangle(conv(0, 0, self.w, self.h), fill="white")

        for src_rect in self.rects:
            draw.rectangle(conv(*src_rect.xyxy()), fill="red", outline="black")

        imcopy = im.copy()
        ImageDraw.Draw(imcopy)

        for fr in self.free_rects:
            rim = Image.new("RGBA", im.size)
            rimdraw = ImageDraw.Draw(rim)
            rimdraw.rectangle(conv_in(*fr.xyxy()),
                              fill="green",
                              outline="black")
            mask = Image.new("RGBA", im.size, "white")
            maskdraw = ImageDraw.Draw(mask)
            maskdraw.rectangle(conv_in(*fr.xyxy()), fill="#c01010")
            mask = mask.split()[0]

            imcopy = Image.composite(imcopy, rim, mask)

        imcopy.save("png/%s.png" % (self.n, ))
Ejemplo n.º 22
0
    def draw_text(self,
                  img,
                  txt,
                  font,
                  txt_color,
                  x_spacing=0,
                  offset_x=0,
                  offset_y=0):
        draw = ImageDraw.Draw(img)
        mask = font.getmask(txt)
        width, height = mask.size[0] + (len(txt) - 1) * x_spacing, mask.size[1]
        xstart, ystart = (img.size[0] - width) / 2 + offset_x, (
            img.size[1] - height) / 2 + offset_y
        for idx, c in enumerate(txt):
            mask = font.getmask(c)
            if mask.size[1] > 0:
                mask_img = Image.new('L', mask.size)
                mask_img.putdata(mask)

                txt_color_img = Image.new('L', mask.size, 255)
                mask_img = Image.composite(txt_color_img,
                                           Image.new('L', mask.size, 0),
                                           mask_img)
                draw.bitmap((xstart, ystart), mask_img, txt_color)

            xstart += mask.size[0] + x_spacing
Ejemplo n.º 23
0
def generate_watermarks(image_name, storage):
    """ Generates all watermarks for the given image """
    img = Image.open(storage.open(image_name))
    for mark_name in settings.ALL_WATERMARK_LIST:
        mark = Image.open(settings.MEDIA_ROOT+mark_name[0])
        sufix = mark_name[1]
        position = determine_position(POSITION, img, mark)
        rotation = ROTATION
        scale = 1.0
        opacity = 1.0
        tile = False
        scale = 1.0
        greyscale = False
        obscure = OBSCURE
        quality = QUALITY

        basedir = '%s/watermarked' % os.path.dirname(image_name)
        base, ext = os.path.splitext(os.path.basename(image_name))
        pos = determine_position(position, img, mark)
        params = {
            'position':  position,
            'opacity':   opacity,
            'scale':     scale,
            'tile':      tile,
            'greyscale': greyscale,
            'rotation':  rotation,
            'base':      base,
            'ext':       ext,
            'quality':   quality,
            'watermark': sufix,
            'opacity_int': int(opacity * 100),
            'left':      pos[0],
            'top':       pos[1],
        }

        wm_name = sufix        
        if opacity < 1:
            mark = reduce_opacity(mark, opacity)
        scale = determine_scale(scale, img, mark)
        mark = mark.resize(scale)
        if greyscale and mark.mode != 'LA':
            mark = mark.convert('LA')
        layer = Image.new('RGBA', img.size, (0,0,0,0))
        if tile:
            first_y = position[1] % mark.size[1] - mark.size[1]
            first_x = position[0] % mark.size[0] - mark.size[0]

            for y in range(first_y, img.size[1], mark.size[1]):
                for x in range(first_x, img.size[0], mark.size[0]):
                    layer.paste(mark, (x, y))
        else:
            layer.paste(mark, position)

        # composite the watermark with the layer
        composed_image =  Image.composite(layer, img, layer)
        memory_file = StringIO()
        composed_image.save(memory_file, quality=quality, format="jpeg")
        cf = ContentFile(memory_file.getvalue())
        filename = "{0}.{1}".format(image_name,sufix)
        storage.save(filename, cf)
Ejemplo n.º 24
0
   def mark(self, path, position=POSITION_BOTTOM_RIGHT):
       '''给单个图片打水印'''
 
       try:
           img = Image.open(path)
       except IOError:
           return None
 
       if img.size[0] < self._mosaic.size[0]:
           print 'width', img.size[0], self._mosaic.size[0]
           return None
       if img.size[1] < self._mosaic.size[1]:
           print 'height', img.size[1], self._mosaic.size[1]
           return None
       img_area = img.size[0] * img.size[1]
       mosaic_area = self._mosaic.size[0] * self._mosaic.size[1]
       ratio = 4
       if img_area < mosaic_area * ratio:
           return None
 
       self._locate(img, position)
       layer = Image.new('RGBA', img.size, (0, 0, 0, 0))
       layer.paste(self._mosaic, self.box)
 
       return Image.composite(layer, img, layer)
Ejemplo n.º 25
0
    def save(self):

        import Image
        import ImageDraw


        im = Image.new("RGBA", (self.w * SCALE, self.h * SCALE))

        draw = ImageDraw.Draw(im)
        draw.rectangle(conv(0, 0, self.w, self.h), fill="white")

        for src_rect in self.rects:
            draw.rectangle(conv(*src_rect.xyxy()), fill="red", outline="black")

        imcopy = im.copy()
        ImageDraw.Draw(imcopy)

        for fr in self.free_rects:
            rim = Image.new("RGBA", im.size)
            rimdraw = ImageDraw.Draw(rim)
            rimdraw.rectangle(conv_in(*fr.xyxy()),
                              fill="green", outline="black")
            mask = Image.new("RGBA", im.size, "white")
            maskdraw = ImageDraw.Draw(mask)
            maskdraw.rectangle(conv_in(*fr.xyxy()), fill="#c01010")
            mask = mask.split()[0]

            imcopy = Image.composite(imcopy, rim, mask)

        imcopy.save("png/%s.png" % (self.n, ))
Ejemplo n.º 26
0
def draw_caption(img, text, outline=2, top=False):
    text_img = Image.new('RGBA', img.size, (0, 0, 0, 0))
    draw = ImageDraw.Draw(text_img)
    w = img.size[0]
    s = 100
    while w >= (img.size[0] - 20):
        font = ImageFont.truetype('HelveticaNeue-CondensedBlack', s)
        w, h = draw.textsize(text, font=font)
        s -= 1
        if s <= 12: break
    text_y = 0 if top else img.size[1] - h
    draw.text((10, text_y), text, font=font, fill='black')
    kernel = [
        0, 1, 2, 1, 0, 1, 2, 4, 2, 1, 2, 4, 0, 4, 1, 1, 2, 4, 2, 1, 0, 1, 2, 1,
        0
    ]
    myfilter = ImageFilter.Kernel((5, 5), kernel, scale=0.25 * sum(kernel))
    for i in range(outline):
        print('Processing image... ' + str(int(float(i) / outline * 100)) +
              '%')
        text_img = text_img.filter(myfilter)
    print('Processing done.')
    draw = ImageDraw.Draw(text_img)
    draw.text((10, text_y), text, font=font, fill='white')
    mask_img = ImageChops.invert(text_img)
    result_img = Image.composite(img, text_img, mask_img)
    return result_img
Ejemplo n.º 27
0
def color_bg_fg(image, bg_color, fg_color):
    '''change transparent background to bg_color and change
    everything non-transparent to fg_color'''
    fg_layer = Image.new('RGBA', image.size, fg_color)
    bg_layer = Image.new('RGBA', image.size, bg_color) 
    masked_image = Image.composite(fg_layer, bg_layer, image)
    return masked_image
Ejemplo n.º 28
0
    def draw_func(self, fobj):
        """Draws a function on the graph image using image compositing.

        The function must have a value method (Points instances work)."""

        eq = getattr(fobj, "eq", "=")  # Check equality
        curve_img = Image.new("RGBA", (self.width, self.height), (0, 0, 0, 0))
        cpix, fpcolor, pthick = curve_img.load(), fobj.pcolor, fobj.pthick
        if not isinstance(pthick, list):  # Square point
            pthick = [pthick]

        if "=" in eq:
            for px in xrange(self.width - 1):  # Iterate over all columns
                yvals = fobj(round(self.coord(px)[0], self.round), self.gvars)
                if yvals is None:
                    continue
                if not isinstance(yvals, list):  # For single points
                    yvals = [yvals]

                for yval in yvals:
                    py = self.pixel(y=yval)[1]
                    for ppx, ppy in self.pad_point(px, py, *pthick):
                        if ((0 <= ppx < self.width)
                                and (0 <= ppy < self.height)):
                            cpix[ppx, ppy] = fpcolor

            self.gimg = Image.composite(curve_img, self.gimg, curve_img)
            self.gimg.save(self.fname)

        if "<" in eq:
            self.shade_between(fobj, self.bot_axis)
        elif ">" in eq:
            self.shade_between(fobj, self.top_axis)
Ejemplo n.º 29
0
 def watermark(image, mark, position, opacity=1):
     """Adds a watermark to an image."""
     if opacity < 1:
         mark = reduce_opacity(mark, opacity)
     if image.mode != RGBA:
         image = image.convert(RGBA)
     # create a transparent layer the size of the
     # image and draw the watermark in that layer.
     layer = Image.new(RGBA, image.size, (0, 0, 0, 0))
     if position == 'tile':
         for y in range(0, image.size[1], mark.size[1]):
             for x in range(0, image.size[0], mark.size[0]):
                 layer.paste(mark, (x, y))
     elif position == 'scale':
         # scale, but preserve the aspect ratio
         ratio = min(
             float(image.size[0]) / mark.size[0],
             float(image.size[1]) / mark.size[1])
         w = int(mark.size[0] * ratio)
         h = int(mark.size[1] * ratio)
         mark = mark.resize((w, h))
         layer.paste(mark, ((image.size[0] - w) / 2,
                            (image.size[1] - h) / 2))
     else:
         layer.paste(mark, position)
     # composite the watermark with the layer
     return Image.composite(layer, image, layer)
Ejemplo n.º 30
0
	def process(self, image):
		yield 'Color...', image
		image = ImageEnhance.Color(image).enhance(0.5)
		yield 'Curves...', image
		bcurv = list(curves.create_curve([(0, 0), (90, 20), (140, 80), (200, 206),
				(255, 255)]))
		image = curves.apply_curves(image, bcurv)
		yield 'Smoth...', image
		blur = image.filter(ImageFilter.BLUR)
		yield 'Merge smoth...', blur
		gradient = gradients.create_gradient(image, 1.2, 1.4)
		mask = gradient.convert("L")
		mask = ImageEnhance.Brightness(mask).enhance(2.0)
		image = Image.composite(image, blur, mask)
		yield 'vignette...', image
		image = vignette.vignette(image)
		yield 'Color...', image
		cyanlayer = image.copy()
		colors.fill_with_color(cyanlayer, (230, 255, 255))
		image = ImageChops.multiply(image, cyanlayer)
		yield 'Aspect...', image
		width, height = image.size
		if width > height:
			dheight = int(width / 16. * 9)
			margin = (height - dheight) / 2
			if margin > 0:
				draw = ImageDraw.Draw(image)
				draw.rectangle((0, 0, width, margin), fill=0)
				draw.rectangle((0, height, width, height - margin), fill=0)
			del draw
		#image = ImageEnhance.Sharpness(image).enhance(1.1)
		#image = ImageEnhance.Brightness(image).enhance(1.2)
		yield 'Done', image
Ejemplo n.º 31
0
 def watermark(self, img):
     import StringIO, Image, ImageEnhance
     tileImage = Image.open(StringIO.StringIO(img))
     wmark = Image.open(self.watermarkimage)
     assert self.watermarkopacity >= 0 and self.watermarkopacity <= 1
     if wmark.mode != 'RGBA':
         wmark = wmark.convert('RGBA')
     else:
         wmark = wmark.copy()
     alpha = wmark.split()[3]
     alpha = ImageEnhance.Brightness(alpha).enhance(self.watermarkopacity)
     wmark.putalpha(alpha)
     if tileImage.mode != 'RGBA':
         tileImage = tileImage.convert('RGBA')
     watermarkedImage = Image.new('RGBA', tileImage.size, (0, 0, 0, 0))
     watermarkedImage.paste(wmark, (0, 0))
     watermarkedImage = Image.composite(watermarkedImage, tileImage,
                                        watermarkedImage)
     buffer = StringIO.StringIO()
     if watermarkedImage.info.has_key('transparency'):
         watermarkedImage.save(
             buffer,
             self.extension,
             transparency=compositeImage.info['transparency'])
     else:
         watermarkedImage.save(buffer, self.extension)
     buffer.seek(0)
     return buffer.read()
Ejemplo n.º 32
0
	def compare_screenshots(self,approved_path, actual_path, diff_path ):
		#
		dataA = open(approved_path, 'rb').read()
		dataB = open(actual_path, 'rb').read()

		if hashlib.md5(dataA).hexdigest() != hashlib.md5(dataB).hexdigest():
			#make one size
			# ToDo 
			imageA = Image.open(approved_path)
			imageB = Image.open(actual_path)
			#if sizes not match - resize smalled
			if ( imageA.size != imageB.size ):
				#get max image size
				w_size = max( [ imageA.size[0] , imageB.size[0] ] )
				h_size = max( [ imageA.size[1] , imageB.size[1] ] )
				#resize images with max size
				imageA = imageA.resize( [ w_size , h_size ] ,Image.ANTIALIAS )
				#imageA.size = [w_size , h_size]
				imageB = imageB.resize( [ w_size , h_size ] ,Image.ANTIALIAS )
				#imageB.size = [w_size , h_size]
			
			#calculate diff
			diff = ImageChops.difference(imageA, imageB)
			#generate pretty diff image  
			light = Image.new('RGB', size=imageA.size, color=0xFFFFFF)
			mask = Image.new('L', size=imageA.size, color=0xFF)
			draw = ImageDraw.Draw(mask)
			draw.rectangle((0, 0, imageA.size[0], imageA.size[1] ), fill=0x80)
			imageA = Image.composite(imageA, light, mask)
			imageA.paste(diff, (0,0), mask)
			imageA.convert("RGB")
			imageA.save( diff_path , "PNG" )
			return True
		return False
Ejemplo n.º 33
0
def apply_watermark(im, mark, position, opacity=1):
    """Adds a watermark to an image."""
    if opacity < 1:
        mark = reduce_opacity(mark, opacity)
    if im.mode != 'RGBA':
        im = im.convert('RGBA')
    # create a transparent layer the size of the image and draw the
    # watermark in that layer.
    layer = Image.new('RGBA', im.size, (0,0,0,0))
    if position == 'tile':
        for y in range(0, im.size[1], mark.size[1]):
            for x in range(0, im.size[0], mark.size[0]):
                layer.paste(mark, (x, y))
    elif position == 'scale':
        # scale, but preserve the aspect ratio
        ratio = min(
            float(im.size[0]) / mark.size[0], float(im.size[1]) / mark.size[1])
        w = int(mark.size[0] * ratio)
        h = int(mark.size[1] * ratio)
        mark = mark.resize((w, h))
        layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2))
    elif position == 'bd': #en bas a droite
        x = im.size[0]-mark.size[0]
        y = im.size[1]-mark.size[1]
        layer.paste(mark, (x, y))
    else:
        layer.paste(mark, position)
    # composite the watermark with the layer
    return Image.composite(layer, im, layer)
Ejemplo n.º 34
0
def captcha_image(request, key):
    store = get_object_or_404(CaptchaStore, hashkey=key)
    text = store.challenge

    if settings.CAPTCHA_FONT_PATH.lower().strip().endswith('ttf'):
        font = ImageFont.truetype(settings.CAPTCHA_FONT_PATH, settings.CAPTCHA_FONT_SIZE)
    else:
        font = ImageFont.load(settings.CAPTCHA_FONT_PATH)

    size = font.getsize(text)
    size = (size[0] * 2, int(size[1] * 1.2))
    image = Image.new('RGB', size, settings.CAPTCHA_BACKGROUND_COLOR)

    try:
        PIL_VERSION = int(NON_DIGITS_RX.sub('', Image.VERSION))
    except:
        PIL_VERSION = 116
    xpos = 2

    charlist = []
    for char in text:
        if char in settings.CAPTCHA_PUNCTUATION and len(charlist) >= 1:
            charlist[-1] += char
        else:
            charlist.append(char)
    for char in charlist:
        fgimage = Image.new('RGB', size, settings.CAPTCHA_FOREGROUND_COLOR)
        charimage = Image.new('L', font.getsize(' %s ' % char), '#000000')
        chardraw = ImageDraw.Draw(charimage)
        chardraw.text((0, 0), ' %s ' % char, font=font, fill='#ffffff')
        if settings.CAPTCHA_LETTER_ROTATION:
            if PIL_VERSION >= 116:
                charimage = charimage.rotate(random.randrange(*settings.CAPTCHA_LETTER_ROTATION), expand=0, resample=Image.BICUBIC)
            else:
                charimage = charimage.rotate(random.randrange(*settings.CAPTCHA_LETTER_ROTATION), resample=Image.BICUBIC)
        charimage = charimage.crop(charimage.getbbox())
        maskimage = Image.new('L', size)

        maskimage.paste(charimage, (xpos, 4, xpos + charimage.size[0], 4 + charimage.size[1]))
        size = maskimage.size
        image = Image.composite(fgimage, image, maskimage)
        xpos = xpos + 2 + charimage.size[0]

    image = image.crop((0, 0, xpos + 1, size[1]))
    draw = ImageDraw.Draw(image)

    for f in settings.noise_functions():
        draw = f(draw, image)
    for f in settings.filter_functions():
        image = f(image)

    out = StringIO()
    image.save(out, "GIF")
    out.seek(0)

    response = HttpResponse()
    response['Content-Type'] = 'image/png'
    response.write(out.read())

    return response
Ejemplo n.º 35
0
 def _write_tile(self,image,z,cell):
     """Writes the actual tile configuration to disk"""
     try:
         path = os.path.join(self.config.tilepath,str(z),str(int(cell['z'][z]['x'])))
         print path
         os.makedirs(os.path.join(self.config.tilepath,str(z),str(int(cell['z'][z]['x']))))
     except os.error: pass
     target = os.path.join(self.config.tilepath,str(z),str(int(cell['z'][z]['x'])),str('%s.%s' % (int(cell['z'][z]['y']),self.config.get('map','format'))))
     try: 
         image.save(target,'PNG')
     except IOError: 
         self.offline_image.save(target,'PNG')
     if self.config.getboolean('service','ll_support') and z >= 11:
         regions_per_tile = math.pow(2,abs(z - self.config.getint('map','raw_ztop')))
         regions_from_top = int(regions_per_tile * (cell['z'][z]['x']%1))
         regions_from_left = int(regions_per_tile * (cell['z'][z]['y']%1))
         tile_name_x = int(cell['z'][self.config.getint('map','raw_ztop')]['x']) - regions_from_top
         tile_name_y = int(cell['z'][self.config.getint('map','raw_ztop')]['y']) - regions_from_left
         #print '%s,%s (%s:%s,%s)' % (tile_name_x,tile_name_y,z,regions_from_top,regions_from_left)
         target = '%s/ll/map-%s-%s-%s-objects.jpg' % (self.config.tilepath,str(abs((self.config.getint('map','raw_ztop')+1) - z)),str(tile_name_x),str(tile_name_y))
         if len(image.split()) == 4:
             image = image.transpose(Image.FLIP_TOP_BOTTOM)
             r,g,b,a = image.split()
             image = Image.composite(image,self.ll_background,a)
         try: image.save(target,'JPEG')
         except IOError: self.offline_image.save(target,'JPEG')
Ejemplo n.º 36
0
def watermark(im, mark, position, opacity=1):
	"""Adds a watermark to an image."""
	if opacity < 1:
		mark = reduce_opacity(mark, opacity)
	if im.mode != 'RGBA':
		im = im.convert('RGBA')
	# create a transparent layer the size of the image and draw the
	# watermark in that layer.
	layer = Image.new('RGBA', im.size, (0,0,0,0))
	if position == 'tile':
		for y in range(0, im.size[1], mark.size[1]):
			for x in range(0, im.size[0], mark.size[0]):
				layer.paste(mark, (x, y))
	elif position == 'scale':
		# scale, but preserve the aspect ratio
		ratio = min(
			float(im.size[0]) / mark.size[0], float(im.size[1]) / mark.size[1])
		#w = int(mark.size[0] * ratio * .4)
		#h = int(mark.size[1] * ratio * .4)
		w,h = 266,126
		#raise Exception(str(w)+' '+str(h))
		mark = mark.resize((w, h), Image.ANTIALIAS)
		layer.paste(mark, ((im.size[0] - w), (im.size[1] - h)))
	else:
		layer.paste(mark, position)
	# composite the watermark with the layer
	return Image.composite(layer, im, layer)
Ejemplo n.º 37
0
def get_location_piece(stack,part):
	#file format: location_t1.t2.tN_part.png
	file_name="location_"
	is_first=True
	for loc in stack:
		if loc.terrain is not None:
			if not is_first:
				is_first=false
			else:
				file_name+='.'
			file_name+=loc.terrain.split('.')[0]
	file_name+='_'+part+'.png'
	if not os.path.isfile(file_name):
		terrain=Image.new((1,1),"RGBA")
		for loc in stack:
			terr=Image.open(get_terrain_piece(loc.terrain,part))
			if terr.mode!="RGBA":
				terr=terr.convert("RGBA")
			if terrain.size==(1,1):
				terrain=terr
			else:
				if terr.size > terrain.size:
					terrain.resize(terr.size,Image.BICUBIC)
				elif terr.size < terrain.size:
					terr.resize(terrain.size,Image.BICUBIC)
				terrain=Image.composite(terr,terrain,terr)
	return file_name
Ejemplo n.º 38
0
def green_key(canvas, key_image, img_source, mtype=KEY_REG):
    s3 = key_image.split()
    mask = (s3[1].point(lambda i: (i > 254 or 256))
            )  # cut out green area (overlay)
    if (mtype == KEY_BLUR or mtype == KEY_BLUR_BRIGHT
            or mtype == KEY_BLUR_BRIGHT_MORE):
        mask = mask.filter(ImageFilter.SMOOTH_MORE)
        mask = mask.filter(ImageFilter.BLUR)
        mask = mask.filter(ImageFilter.SMOOTH_MORE)
    if (mtype == KEY_BLUR_BRIGHT):
        mask = (mask.point(lambda k: (k * 2)))
    elif (mtype == KEY_BLUR_BRIGHT_MORE):
        mask = (mask.point(lambda k: k > 20 and (k * k)))


# 	mask.show()
# 	mask.save("images/saved/mask.jpg")
# 	canvas.convert("RGBA") # needed?

    if (canvas.size != img_source.size):  # fix image size
        if (canvas.size < img_source.size):
            print "resizing canvas", canvas.size, img_source.size, key_image.size
            canvas = ImageOps.fit(canvas, img_source.size)
        else:
            print "resizing img_source and mask", canvas.size, img_source.size, key_image.size
            img_source = ImageOps.fit(img_source, canvas.size)
            mask = ImageOps.fit(mask, canvas.size)
    image = Image.composite(img_source, canvas, mask)
    return image
Ejemplo n.º 39
0
def meme_stamp(image_path, toptext, bottomtext, color="white"):
    
    font=ImageFont.truetype("Impact.ttf", 26)
    im = Image.open(os.getcwd() + image_path)
    
    # Gotta capitalize dat text!
    toptext = toptext.upper()
    bottomtext = bottomtext.upper()
    
    # Dat picture margin
    margin=(5,5)
    
    if im.mode != "RGBA":
        im = im.convert("RGBA")
    
    # Make a layer. yep. awesome comment.
    textlayer = Image.new("RGBA", im.size, (0,0,0,0))
    textdraw = ImageDraw.Draw(textlayer)
    
    # Find centered locations for top and bottom text
    toptextsize = textdraw.textsize(toptext, font=font)
    bottomtextsize = textdraw.textsize(bottomtext, font=font)
    toppos = top_text_pos(im.size,toptextsize,margin)
    bottompos = bottom_text_pos(im.size,bottomtextsize,margin)
    
    # Draw dat text
    textdraw.text(toppos, toptext, font=font, fill=color)
    textdraw.text(bottompos, bottomtext, font=font, fill=color)

    # Return dat image
    return Image.composite(textlayer, im, textlayer)
Ejemplo n.º 40
0
    def DrawFrame(self):
        mask = Image.new("L", (self.x_size, self.y_size), self.mask_background)
        frame_output = Image.new("RGB", (self.x_size, self.y_size),
                                 self.background_color)
        mask_draw = ImageDraw.Draw(mask)
        slope = float(self.y_thick) / self.x_thick
        for x in range(self.x_thick):
            # Auto Bevel using (x, x)
            linecolor = self.ColorFunc(x, self.x_thick)
            clist = [(x, x * slope), (x, self.y_size - x * slope)]
            mask_draw.line(clist, fill=linecolor)
            clist = [(self.x_size - x, x * slope),
                     (self.x_size - x, self.y_size - x * slope)]
            mask_draw.line(clist, fill=linecolor)
        for y in range(self.y_thick):
            linecolor = self.ColorFunc(y, self.y_thick)
            clist = [(y / slope, y), (self.x_size - y / slope, y)]
            mask_draw.line(clist, fill=linecolor)
            clist = [(y / slope, self.y_size - y),
                     (self.x_size - y / slope, self.y_size - y)]
            mask_draw.line(clist, fill=linecolor)
        # FIXME(Sean): repeat instead of crop
        #mask_input_im = self.back_im.crop((0, 0, self.x_size, self.y_size))
        mask_input_im = Image.new("RGB", (self.x_size, self.y_size),
                                  self.background_color)
        mask_input_im.paste(self.back_im.resize((self.x_size, self.y_size)),
                            (0, 0))
        im_out = Image.composite(mask_input_im, frame_output, mask)

        #return mask
        return im_out
Ejemplo n.º 41
0
def draw_marker(width, height, offset, filename):
    im = Image.new('L', (128, 256), 255)
    draw = ImageDraw.Draw(im)

    cx = (im.size[0] / 2) + 1.5
    cy = (im.size[1] / 4) + 1.5
    radius = width * 4.0 / 2.0
    offset = int(offset * 4.0)
    for thickness, colour in ((0, 0x60), (4, 0xE0)):
        ol = im.copy()
        r = radius + 0.5 - thickness
        draw.ellipse((cx - r, cy - r, cx + r, cy + r), fill=colour)
        x1 = offset + 0.5 - (thickness * 1.5)
        y1 = (height * 4.0) + 0.5 - (width * 2.0) - (thickness * 2.0)
        draw.polygon((cx + 0.5, cy + y1, cx - 0.5, cy + y1,
                      cx - x1, cy + 16.5, cx + x1, cy + 16.5),
                     fill=colour)
    del draw

    im = im.resize((im.size[0] / 4, im.size[1] / 4), Image.ANTIALIAS)
    ol = ol.resize(im.size, Image.ANTIALIAS)
    mask = Image.eval(ol, lambda x: (0, 255)[x < 210])
    im = Image.composite(im, ImageChops.constant(im, 0), mask)
    im = im.crop(im.getbbox())
    im.save(filename, transparency=0)
Ejemplo n.º 42
0
def watermark(im, mark, position, opacity=1):
	"""添加水印"""
	try:
		if opacity < 1:
			mark = set_opacity(mark, opacity)
		if im.mode != 'RGBA':
			im = im.convert('RGBA')
		if im.size[0] < mark.size[0] or im.size[1] < mark.size[1]:
			print "The mark image size is larger size than original image file."
			return False
	#设置水印位置
		if position == 'left_top':
			x = 0
			y = 0
		elif position == 'left_bottom':
			x = 0
			y = im.size[1] - mark.size[1]
		elif position == 'right_top':
			x = im.sizep[0] - mark.size[0]
		elif position == 'right_bottom':
			x = im.size[0] - mark.size[0]
			y = im.size[1] - mark.size[1]
		else:
			x = (im.size[0] - mark.size[0]) / 2
			y = (im.size[1] - mark.size[1]) / 2
		layer = Image.new('RGBA', im.size)
		layer.paste(mark,(x,y))
		return Image.composite(layer, im, layer)
	except Exception as e:
		print ">>>>>> WaterMark EXCEPTION: " + str(e)
		return False
Ejemplo n.º 43
0
def add_watermark_text(im,
                       text,
                       angle=23,
                       opacity=0.25,
                       font='/Library/Fonts/Copperplate.ttc'):
    if im.mode != 'RGBA':
        im = im.convert('RGBA')
    watermark = Image.new('RGBA', im.size, (0, 0, 0, 0))
    size = 2
    n_font = ImageFont.truetype(font, size)
    n_width, n_height = n_font.getsize(text)
    # grow size until the limit is reached
    while n_width + n_height < watermark.size[0]:
        size += 2
        n_font = ImageFont.truetype(font, size)
        n_width, n_height = n_font.getsize(text)
    draw = ImageDraw.Draw(watermark, 'RGBA')
    draw.text(((watermark.size[0] - n_width) / 2,
               (watermark.size[1] - n_height) / 2),
              text, (0, 0, 0),
              font=n_font)
    watermark = watermark.rotate(angle, Image.BICUBIC)
    alpha = watermark.split()[3]
    alpha = ImageEnhance.Brightness(alpha).enhance(opacity)
    watermark.putalpha(alpha)
    return Image.composite(watermark, im, watermark)
Ejemplo n.º 44
0
def generate_image(text, font_file, size, colour, image_destination):
    """
    Text transform based on:
    http://nedbatchelder.com/blog/200801/truly_transparent_text_with_pil.html
    http://phark.typepad.com/phark/2003/08/accessible_imag.html
    """
    pos = (0,0)
    image = Image.new("RGB", (1, 1), (0,0,0))
    font = ImageFont.truetype(font_file, size)
    image = image.resize(font.getsize(text))
    alpha = Image.new("L", image.size, "black")
    # Make a grayscale image of the font, white on black.
    imtext = Image.new("L", image.size, 0)
    drtext = ImageDraw.Draw(imtext)
    drtext.text(pos, text, font=font, fill="white")
    # Add the white text to our collected alpha channel. Gray pixels around
    # the edge of the text will eventually become partially transparent
    # pixels in the alpha channel.
    alpha = ImageChops.lighter(alpha, imtext)
    # Make a solid colour, and add it to the colour layer on every pixel
    # that has even a little bit of alpha showing.
    solidcolour = Image.new("RGBA", image.size, colour)
    immask = Image.eval(imtext, lambda p: 255 * (int(p != 0)))
    image = Image.composite(solidcolour, image, immask)
    # These two save()s are just to get demo images of the process.
    #image.save("transcolour.png", "PNG")
    #alpha.save("transalpha.png", "PNG")
    # Add the alpha channel to the image, and save it out.
    image.putalpha(alpha)
    image.save(image_destination, 'PNG')
    return image
Ejemplo n.º 45
0
Archivo: motion.py Proyecto: owad/guard
def green_key(canvas,key_image,img_source,mtype=KEY_REG):
    s3 = key_image.split()
    mask = (s3[1].point(lambda i: (i > 254 or 256))) # cut out green area (overlay)
    if(mtype == KEY_BLUR or mtype == KEY_BLUR_BRIGHT or mtype == KEY_BLUR_BRIGHT_MORE):
        mask = mask.filter(ImageFilter.SMOOTH_MORE)
        mask = mask.filter(ImageFilter.BLUR)
        mask = mask.filter(ImageFilter.SMOOTH_MORE)
    if(mtype == KEY_BLUR_BRIGHT):
        mask = (mask.point(lambda k: (k*2)))    
    elif(mtype == KEY_BLUR_BRIGHT_MORE):
        mask = (mask.point(lambda k: k > 20 and (k*k)))
#   mask.show()
#   mask.save("images/saved/mask.jpg")
#   canvas.convert("RGBA") # needed?

    if(canvas.size != img_source.size): # fix image size
        if(canvas.size < img_source.size):
            print "resizing canvas", canvas.size, img_source.size, key_image.size
            canvas = ImageOps.fit(canvas,img_source.size)
        else:
            print "resizing img_source and mask", canvas.size, img_source.size, key_image.size
            img_source = ImageOps.fit(img_source,canvas.size)
            mask = ImageOps.fit(mask,canvas.size)
    image = Image.composite(img_source,canvas,mask)
    return image
Ejemplo n.º 46
0
def draw_marker(width, height, offset, filename):
    im = Image.new('L', (128, 256), 255)
    draw = ImageDraw.Draw(im)

    cx = (im.size[0] / 2) + 1.5
    cy = (im.size[1] / 4) + 1.5
    radius = width * 4.0 / 2.0
    offset = int(offset * 4.0)
    for thickness, colour in ((0, 0x60), (4, 0xE0)):
        ol = im.copy()
        r = radius + 0.5 - thickness
        draw.ellipse((cx - r, cy - r, cx + r, cy + r), fill=colour)
        x1 = offset + 0.5 - (thickness * 1.5)
        y1 = (height * 4.0) + 0.5 - (width * 2.0) - (thickness * 2.0)
        draw.polygon((cx + 0.5, cy + y1, cx - 0.5, cy + y1, cx - x1, cy + 16.5,
                      cx + x1, cy + 16.5),
                     fill=colour)
    del draw

    im = im.resize((im.size[0] / 4, im.size[1] / 4), Image.ANTIALIAS)
    ol = ol.resize(im.size, Image.ANTIALIAS)
    mask = Image.eval(ol, lambda x: (0, 255)[x < 210])
    im = Image.composite(im, ImageChops.constant(im, 0), mask)
    im = im.crop(im.getbbox())
    im.save(filename, transparency=0)
Ejemplo n.º 47
0
def icons(request,project_name):
    try:
        get = request.GET
        color = get['color'].split('/')[-1]
    except:
        return HttpResponseNotFound()

    cache = "%s/cache/%s_icons.png" % (settings.DATA_DIR,color)
    if os.path.isfile(cache):
        response = HttpResponse(mimetype="image/png")
        cache = open(cache,'r')
        response.write(cache.read())
        cache.close()
        return response

    try:
        im = Image.open("%s/icons_mask.png" % settings.ICONS_DIR)
    except:
        return HttpResponseNotFound()

    bg = Image.new('RGB',im.size,color)
    tr = Image.new('RGBA',im.size,(0,0,0,0))
    result = Image.composite(bg,tr,im)
    response = HttpResponse(mimetype="image/png")
    result.save(cache)
    result.save(response,'PNG')
    return response
Ejemplo n.º 48
0
def water_mark(img_data, opacity=1):
    img = Image.open(StringIO(img_data))
    mark = Image.open('/mark/path')  # 水印文件可以使用指定路径
    #mark = fs.get(mark_url)
    if not mark:
        return img_data
    mark = Image.open(StringIO(mark))
    if opacity < 1:
        mark = reduce_opacity(mark, opacity)
    if img.mode != 'RGBA':
        img = img.convert('RGBA')
        img_format = 'JPEG'
    else:
        img_format = 'PNG'
    # 指定上传图片最大宽度580和高宽600,如超过进行resize
    if img.size[0] > 580:
        img = img.resize((580, img.size[1] / (img.size[0] / 580.0)),
                         resample=1)
    if img.size[1] > 600:
        img = img.resize((img.size[0] / (img.size[1] / 600.0), 600),
                         resample=1)
    layer = Image.new('RGBA', img.size, (0, 0, 0, 0))
    layer.paste(mark, mark_layout(img, mark, layout))
    img = Image.composite(layer, img, layer)
    new_img = StringIO()
    img.save(new_img, img_format, quality=100)
    return new_img.getvalue()
Ejemplo n.º 49
0
def watermark(im, mark, position, opacity=1):
    """Adds a watermark to an image.
    http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/362879
    """
    if opacity < 1:
        mark = reduce_opacity(mark, opacity)
    if im.mode != "RGBA":
        im = im.convert("RGBA")
    # create a transparent layer the size of the image and draw the
    # watermark in that layer.
    layer = Image.new("RGBA", im.size, (0, 0, 0, 0))
    if position == "tile":
        for y in range(0, im.size[1], mark.size[1]):
            for x in range(0, im.size[0], mark.size[0]):
                layer.paste(mark, (x, y))
    elif position == "scale":
        # scale, but preserve the aspect ratio
        ratio = min(float(im.size[0]) / mark.size[0], float(im.size[1]) / mark.size[1])
        w = int(mark.size[0] * ratio)
        h = int(mark.size[1] * ratio)
        mark = mark.resize((w, h))
        layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2))
    else:
        layer.paste(mark, position)
    # composite the watermark with the layer
    return Image.composite(layer, im, layer)
Ejemplo n.º 50
0
    def addWaterMark(self):
        """
        Process the water mark using the main image and the
        water mark image.
        """
        # There are more than one way to achieve
        # creating a watermark. The following flag,
        # if True will use Image.composite to create
        # the watermark.
        using_composite = False

        if self.waterMark is None:
            return
        # Add Transparency
        self.waterMark = self.addTransparency(self.waterMark)
        # Get the anchor point
        pos_x, pos_y = self._getMarkPosition(self.mainImage, self.waterMark)
        # Create the watermark
        if not using_composite:
            # Paste the image using the transparent
            # watermark image as the mask.
            self.mainImage.paste(self.waterMark, (pos_x, pos_y),
                                 self.waterMark)
        else:
            # Alternate method to create water mark.
            # using Image.composite.
            # Create a new canvas
            canvas = Image.new('RGBA', self.mainImage.size, (0, 0, 0, 0))
            # Paste the watermark on the canvas
            canvas.paste(self.waterMark, (pos_x, pos_y))
            # Create a composite image
            self.mainImage = Image.composite(canvas, self.mainImage, canvas)
Ejemplo n.º 51
0
 def __call__(self, file_name):
     file_path = download_image_to_cache(file_name, self.cache)
     im = Image.open(file_path)
     if im.mode != self.mode:
         im = im.convert(self.mode)
     if np.all(im.size != self.resize_to):
         new_shape = (int(self.resize_to[0]), int(self.resize_to[1]))
         im = im.resize(new_shape, Image.ANTIALIAS)
     if self.mask is not None:
         mask = self.mask
         tmask = ImageOps.invert(mask.convert('RGBA').split()[-1])
         im = Image.composite(im, mask, tmask).convert(self.mode)
     if self._crop != (0, 0,) + self.resize_to:
         im = im.crop(self._crop)
     l, t, r, b = self._crop
     assert im.size == (r - l, b - t)
     imval = np.asarray(im, self.dtype)
     rval = imval
     if self.normalize:
         rval -= rval.mean()
         rval /= max(rval.std(), 1e-3)
     else:
         rval /= 255.0
     assert rval.shape[:2] == self.resize_to
     return rval
def apply_watermark(image, mark):
	opacity = 1
	position = 'bottom-right'

	# reduces the opacity according the setting
	if opacity < 1:
		mark = reduce_opacity(mark, opacity)

	# convert the image to RGBA
	if image.mode != 'RGBA':
		image = image.convert('RGBA')

	# create a transparent layer the size of the image
	layer = Image.new('RGBA', image.size, (0,0,0,0))

	if position == 'center':
		# define the horizontal and vertical center of the image
		left = (image.size[0] / 2) - int(mark.size[0] / 2)
		top = (image.size[1] / 2) - int(mark.size[1] / 2)
	elif position == 'bottom-right':
		padding_right = 30
		padding_bottom = 20
		left = (image.size[0] - int(mark.size[0])) - padding_right
		top = (image.size[1] - int(mark.size[1])) - padding_bottom

	# paste the watermark to the center of empty
	layer.paste(mark, (left, top))

	# compose the empty layer with the original image
	return Image.composite(layer, image, layer)
Ejemplo n.º 53
0
def captcha_image(request, key):
    store = get_object_or_404(CaptchaStore, hashkey=key)
    text = store.challenge

    if settings.CAPTCHA_FONT_PATH.lower().strip().endswith('ttf'):
        font = ImageFont.truetype(settings.CAPTCHA_FONT_PATH, settings.CAPTCHA_FONT_SIZE)
    else:
        font = ImageFont.load(settings.CAPTCHA_FONT_PATH)

    size = font.getsize(text)
    size = (size[0] * 2, int(size[1] * 1.2))
    image = Image.new('RGB', size, settings.CAPTCHA_BACKGROUND_COLOR)

    try:
        PIL_VERSION = int(NON_DIGITS_RX.sub('', Image.VERSION))
    except:
        PIL_VERSION = 116
    xpos = 2

    charlist = []
    for char in text:
        if char in settings.CAPTCHA_PUNCTUATION and len(charlist) >= 1:
            charlist[-1] += char
        else:
            charlist.append(char)
    for char in charlist:
        fgimage = Image.new('RGB', size, settings.CAPTCHA_FOREGROUND_COLOR)
        charimage = Image.new('L', font.getsize(' %s ' % char), '#000000')
        chardraw = ImageDraw.Draw(charimage)
        chardraw.text((0, 0), ' %s ' % char, font=font, fill='#ffffff')
        if settings.CAPTCHA_LETTER_ROTATION:
            if PIL_VERSION >= 116:
                charimage = charimage.rotate(random.randrange(*settings.CAPTCHA_LETTER_ROTATION), expand=0, resample=Image.BICUBIC)
            else:
                charimage = charimage.rotate(random.randrange(*settings.CAPTCHA_LETTER_ROTATION), resample=Image.BICUBIC)
        charimage = charimage.crop(charimage.getbbox())
        maskimage = Image.new('L', size)

        maskimage.paste(charimage, (xpos, 4, xpos + charimage.size[0], 4 + charimage.size[1]))
        size = maskimage.size
        image = Image.composite(fgimage, image, maskimage)
        xpos = xpos + 2 + charimage.size[0]

    image = image.crop((0, 0, xpos + 1, size[1]))
    draw = ImageDraw.Draw(image)

    for f in settings.noise_functions():
        draw = f(draw, image)
    for f in settings.filter_functions():
        image = f(image)

    out = StringIO()
    image.save(out, "PNG")
    out.seek(0)

    response = HttpResponse()
    response['Content-Type'] = 'image/png'
    response.write(out.read())

    return response
Ejemplo n.º 54
0
def apply_watermark(im, mark, position, opacity=1):
    """Adds a watermark to an image."""
    if opacity < 1:
        mark = reduce_opacity(mark, opacity)
    if im.mode != 'RGBA':
        im = im.convert('RGBA')
    # create a transparent layer the size of the image and draw the
    # watermark in that layer.
    layer = Image.new('RGBA', im.size, (0, 0, 0, 0))
    if position == 'tile':
        for y in range(0, im.size[1], mark.size[1]):
            for x in range(0, im.size[0], mark.size[0]):
                layer.paste(mark, (x, y))
    elif position == 'scale':
        # scale, but preserve the aspect ratio
        ratio = min(
            float(im.size[0]) / mark.size[0],
            float(im.size[1]) / mark.size[1])
        w = int(mark.size[0] * ratio)
        h = int(mark.size[1] * ratio)
        mark = mark.resize((w, h))
        layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2))
    else:
        if im.size[0] > mark.size[0] or im.size[1] > mark.size[1]:
            position = tuple(map(int, position[1:-1].split(',')))
            #position=((im.size[0] - mark.size[0]+position[0]) , (im.size[1] - mark.size[1] + position[1]))
            position = tuple(
                map(lambda x, y, p: p
                    if p > 0 else x - y + p, im.size, mark.size, position))
            layer.paste(mark, position)
    # composite the watermark with the layer
    return Image.composite(layer, im, layer)
Ejemplo n.º 55
0
def merge_image_layers(im, image_layers):
    if not image_layers:
        image_layers = dict()

    width, height = im.size

    for layer_name in LAYER_TYPES.split():
        layer = image_layers[layer_name]
        if type(layer) == list:
            if len(layer) == width * height:
                #It's a list of pixels, imagify and compose together
                foreground = Image.new('RGBA', (width, height), (0, 0, 0, 0))
                foreground.putdata(layer)
                im = Image.composite(foreground, im, foreground)
        else:
            im = Image.composite(layer, im, layer)
    return im
Ejemplo n.º 56
0
    def do_composite(self):
        """usage: composite <image:pic1> <image:pic2> <image:mask>

        Replace two images and a mask with their composite.
        """
        image1 = self.do_pop()
        image2 = self.do_pop()
        mask = self.do_pop()
        self.push(Image.composite(image1, image2, mask))
Ejemplo n.º 57
0
def watermark(im, original_witdh, position=POSITION[3], opacity=0.8):
    """Adds a watermark to an image."""
    #im = Image.open(imagefile)

    #水印图片宽高

    #original_witdh, original_height= Image.open(im).size
    #

    mark_prefix = 'static/water_mark/'+water_img_check(original_witdh)
    mark = Image.open(mark_prefix)

    if opacity < 1:
        mark = reduce_opacity(mark, opacity)
    if im.mode != 'RGBA':
        im = im.convert('RGBA')
    # create a transparent layer the size of the image and draw the
    # watermark in that layer.
    layer = Image.new('RGBA', im.size, (0,0,0,0))
    if position == 'title':
        for y in range(0, im.size[1], mark.size[1]):
            for x in range(0, im.size[0], mark.size[0]):
                layer.paste(mark, (x, y))
    elif position == 'scale':
        # scale, but preserve the aspect ratio
        ratio = min(
            float(im.size[0]) / mark.size[0], float(im.size[1]) / mark.size[1])
        w = int(mark.size[0] * ratio)
        h = int(mark.size[1] * ratio)
        mark = mark.resize((w, h))
        layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2))

    elif position == POSITION[0]:
        #lefttop
        position = (PADDING,PADDING)
        layer.paste(mark, position)

    elif position == POSITION[1]:
        #righttop
        position = (im.size[0] - mark.size[0]-PADDING, PADDING)
        layer.paste(mark, position)

    elif position == POSITION[2]:
        #center
        position = ((im.size[0] - mark.size[0])/2,(im.size[1] - mark.size[1])/2)
        layer.paste(mark, position)
    elif position == POSITION[3]:
        #left bottom
        position = (PADDING,im.size[1] - mark.size[1]-PADDING,)
        layer.paste(mark, position)
    else:
        #right bottom (default)
        position = (im.size[0] - mark.size[0]-PADDING, im.size[1] - mark.size[1]-PADDING,)
        layer.paste(mark, position)
    # composite the watermark with the layer

    return Image.composite(layer, im, layer)