Solution
문장단위로 이미지 파일로 된 세로쓰기 소설 읽기 프로그램 ver.1.1
storkbear
2022. 8. 30. 16:39
from PIL import Image, ImageTk
import tkinter as tk
import os
print('filepath : ')
filepath=input()
print('pixel size :')
pixel_size=int(input())
print('length : ')
length=int(input())
print('start page : ')
page=int(input())-1
i=0
filenames = os.listdir(filepath)
image1 = Image.open(filepath + '/' + filenames[page])
window=tk.Tk()
canvas=tk.Canvas(window, width=pixel_size, height=length)
canvas.pack()
image1=image1.resize((image1.size[0]*length//image1.size[1],length))
croppedImage = image1.crop((image1.size[0] - pixel_size * (i + 1), 0, image1.size[0] - pixel_size * i, image1.size[1]))
tk_img=ImageTk.PhotoImage(croppedImage)
container=canvas.create_image(0,0,anchor='nw',image=tk_img)
window.title('[%d/%d]' % (page + 1, len(filenames)))
# 이미지 자르기 crop함수 이용 ex. crop(left,up, rigth, down)
def next_cut(event):
global i
global image1
global pixel_size
global container
global length
i += 1
croppedImage = image1.crop((image1.size[0] - pixel_size * (i*0.1 + 1), 0, image1.size[0] - pixel_size * i*0.1, image1.size[1]))
tk_img1 = ImageTk.PhotoImage(croppedImage)
canvas.itemconfig(container,image=tk_img1)
canvas.imgref = tk_img1
window.title('[%d/%d]' % (page + 1, len(filenames)))
def before_cut(event):
global i
global image1
global pixel_size
global length
i -= 1
croppedImage = image1.crop((image1.size[0] - pixel_size * (i*0.1 + 1), 0, image1.size[0] - pixel_size * i*0.1, image1.size[1]))
tk_img1 = ImageTk.PhotoImage(croppedImage)
canvas.itemconfig(container,image=tk_img1)
canvas.imgref = tk_img1
window.title('[%d/%d]' % (page + 1, len(filenames)))
def next_page(event):
global i
global image1
global page
global filepath
global filenames
global pixel_size
global length
i = 0
page += 1
image1 = Image.open(filepath + '/' + filenames[page])
image1=image1.resize((image1.size[0] * length // image1.size[1], length))
croppedImage = image1.crop((image1.size[0] - pixel_size * (i + 1), 0, image1.size[0] - pixel_size * i, image1.size[1]))
tk_img1 = ImageTk.PhotoImage(croppedImage)
canvas.itemconfig(container,image=tk_img1)
canvas.imgref = tk_img1
window.title('[%d/%d]' % (page + 1, len(filenames)))
def before_page(event):
global i
global image1
global page
global filepath
global filenames
global pixel_size
global length
i = 0
page -= 1
image1 = Image.open(filepath + '/' + filenames[page])
image1=image1.resize((image1.size[0] * length // image1.size[1], length))
croppedImage = image1.crop((image1.size[0] - pixel_size * (i + 1), 0, image1.size[0] - pixel_size * i, image1.size[1]))
tk_img1 = ImageTk.PhotoImage(croppedImage)
canvas.itemconfig(container,image=tk_img1)
canvas.imgref = tk_img1
window.title('[%d/%d]' % (page + 1, len(filenames)))
def pixel_change(event):
global i
global image1
global pixel_size
global length
i=0
print('changed pixel size : ')
pixel_size = int(input())
croppedImage = image1.crop((image1.size[0] - pixel_size * (i + 1), 0, image1.size[0] - pixel_size * i, image1.size[1]))
tk_img1 = ImageTk.PhotoImage(croppedImage.resize((pixel_size,length)))
canvas.itemconfig(container, image=tk_img1)
canvas.imgref = tk_img1
window.title('[%d/%d]' % (page + 1, len(filenames)))
window.bind('<d>',next_cut)
window.bind('<a>',before_cut)
window.bind('<e>',next_page)
window.bind('<q>',before_page)
window.bind('<c>',pixel_change)
window.mainloop()
수정 내역: 이미지를 크롭한뒤에 리사이즈해서 글씨가 원래의 비율을 잃어버리는 문제가 있다.( 대신 글자는 크게 볼수있음)
비율을 유지하기 위해서 리사이즈한뒤에 원하는 크기로 크롭, 비율을 유지하여 글씨가 찌그러지지 않게 바꾸었다. (대신 글자가 원래의 비율이기 때문에 작은 length로 설정하면 읽기 어려울 수 있다.)
용량문제 (패키지)로 첨부는 불가능