Dùng Python để tạo file ảnh mới từ ảnh PNG hoặc JPG

Như ta đã biết, trong một bức ảnh không chỉ chứa nội dung bức ảnh là các điểm ảnh mà còn chứa nhiều thông tin ẩn trong bức ảnh đó nữa. Những nội dung đó người ta gọi là meta data của bức ảnh, những thông tin này bao gồm thời gian tạo, thiết bị tạo, thiết bị hoặc phần mềm đã sửa…
Nhiều trường hợp ta muốn xóa hết các thông tin này đi, window hoặc một số phần mềm có thể xóa hết các thông tin này nhưng không triệt để hoặc không đáng tin cậy.
Script này tiến hành đọc ảnh và sao chép từng điểm ảnh một nên có thể loại bỏ hoàn toàn các thông tin trong meta data của bức ảnh. Hơn nữa, để tạo sự khác biệt so với ảnh gốc, script còn tiến hành chỉnh sửa thêm như: đổi độ tương phản, độ sáng, độ sắc nét.

Vì liên quan xử lý ảnh nên cần phải cài đặt thêm thư viện bổ sung là thư viện Pillow của Python.
Các bước thiết lập như sau:
1: Cài đặt Python 3.8
2: Tải PIP về
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
3: Cài PIP
python get-pip.py
4: Cài thư viện Pillow thông qua PIP
pip install Pillow

Sau đây là nội dung Script:

###curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
###python get-pip.py
###pip install Pillow

from PIL import Image, ImageFilter,  ImageDraw, ImageFont, ImageEnhance
import os
path = os.getcwd()
m = ''
print(path)
l=len(path)
files_jpg = []
files_png = []
# r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for file in f:
        if '.jpg' in file:
            files_jpg.append(os.path.join(r, file))
        if '.JPG' in file:
            files_jpg.append(os.path.join(r, file))
        if '.png' in file:
            files_png.append(os.path.join(r, file))
        if '.PNG' in file:
            files_png.append(os.path.join(r, file))
        print(path+'\\new\\'+r[l:])
        m=path+'\\new\\'+r[l:]
        if not os.path.exists(m):
            os.makedirs(m)
            print("Directory " , m ,  " Created ")
        else:    
            print("Directory " , m ,  " already exists")  
        print('#') 

for f in files_png:
    im = Image.open(f)
    #print(im.format, im.size, im.mode)
    #print(im.size[0],im.size[1])
    #print(im.getpixel((0, 0)))
    im_new = Image.new("RGBA", (im.size[0], im.size[1]), (0, 0, 0, 0))
    for x in range(im.size[0]):
        for y in range(im.size[1]):
            im_new.putpixel((x, y), im.getpixel((x, y)))
    factor1=1.01
    im_out1 = ImageEnhance.Brightness(im_new).enhance(factor1)
    factor2=0.99
    im_out2 = ImageEnhance.Contrast(im_out1).enhance(factor2)
    factor3=1.01
    im_out3 = ImageEnhance.Contrast(im_out2).enhance(factor3)
    draw_new = ImageDraw.Draw(im_out3)
    im_new.save(f.replace(path,path+'\\new\\'), quality=100)

for f in files_jpg:
    im = Image.open(f)
    #print(im.format, im.size, im.mode)
    #print(im.size[0],im.size[1])
    #print(im.getpixel((0, 0)))
    im_new = Image.new("RGB", (im.size[0], im.size[1]), (0, 0, 0))
    for x in range(im.size[0]):
        for y in range(im.size[1]):
            im_new.putpixel((x, y), im.getpixel((x, y)))
    factor1=1.01
    im_out1 = ImageEnhance.Brightness(im_new).enhance(factor1)
    factor2=0.99
    im_out2 = ImageEnhance.Contrast(im_out1).enhance(factor2)
    factor3=1.01
    im_out3 = ImageEnhance.Contrast(im_out2).enhance(factor3)
    draw_new = ImageDraw.Draw(im_out3)
    im_new.save(f.replace(path,path+'\\new\\'), quality=90)
print('Done') 

Cách dùng: Lưu nội dung này vào file đuôi .py, đặt file vào thư mục ảnh cần làm. Trỏ CMD đến thư mục này rồi chạy: python file.py. Script sẽ tạo ra thư mục New cùng cấp với file này và chứa từng ảnh mới tương ứng.

About the Author: vietnamit

You May Also Like

Leave a Reply

Your email address will not be published. Required fields are marked *