File size: 1,930 Bytes
c3b62d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from PIL import Image, ImageFilter
import numpy as np

def erode(image, iterations=1):
    # モルフォロジー操作のためのカーネルを定義
    kernel = np.array([[0, 1, 0],
                       [1, 1, 1],
                       [0, 1, 0]], dtype=np.uint8)
    
    image_np = np.array(image)
    for _ in range(iterations):
        eroded_image = np.zeros_like(image_np)
        for i in range(1, image_np.shape[0] - 1):
            for j in range(1, image_np.shape[1] - 1):
                region = image_np[i-1:i+2, j-1:j+2]
                eroded_image[i, j] = np.min(region + (1 - kernel) * 255)
        image_np = eroded_image

    return Image.fromarray(image_np.astype(np.uint8))

def convert_non_white_to_black(image):
    # 画像をNumPy配列に変換
    image_np = np.array(image)
    
    # 完全に白でないピクセルをすべて黒にする
    #image_np[image_np < 250] = 0
    image_np[image_np > 200] = 255
    
    # NumPy配列を画像に変換
    return Image.fromarray(image_np)



def adjust_transparency(image):
    # 画像を読み込み、グレースケールに変換
    image.save("tmp.png")
    image = image.convert('L')
    image = convert_non_white_to_black(image)
    image = image.filter(ImageFilter.SMOOTH)
    
    result = Image.new('RGBA', image.size)
    for x in range(image.width):
        for y in range(image.height):
            # グレースケール値を取得
            gray = image.getpixel((x, y))

            alpha = 255
            # 透明度の設定
            if gray == 0:
                alpha = 0  # 完全に透明
            else:
                alpha = 255-gray  # 完全に不透明

            # 新しい画像にピクセルを設定
            result.putpixel((x, y), (0, 0, 0, alpha))

    return result

def remove_bg(image):
    image = adjust_transparency(image)