[파이썬] web2py에서의 이미지 및 미디어 처리

웹 개발 프레임워크인 web2py는 Python으로 작성된 강력한 도구로, 이미지 및 미디어 파일을 처리하는 데에도 효과적으로 사용될 수 있습니다. 이번 블로그 포스트에서는 web2py에서 이미지 및 미디어 파일을 업로드, 표시, 처리하는 방법에 대해 알아보겠습니다.

이미지 및 미디어 파일 업로드

web2py는 파일을 업로드하기 위한 편리한 기능을 제공합니다. 사용자가 이미지 파일을 업로드하면, 이를 안전하게 저장하고 식별자를 부여하여 관리할 수 있습니다.

먼저, db.py 파일을 생성하여 데이터베이스 모델을 정의합니다.

# db.py

db.define_table('image',
    Field('title', requires=IS_NOT_EMPTY()),
    Field('image', 'upload', uploadfolder='path/to/upload/folder'))

위의 예시에서 image 테이블은 titleimage 필드로 구성되어 있습니다. upload 필드 타입은 파일을 업로드할 때 사용되며, uploadfolder로 파일이 저장될 폴더를 지정할 수 있습니다.

그런 다음, 컨트롤러 파일에서 이미지를 업로드하는 함수를 작성합니다.

# controllers/default.py

def upload_image():
    form = SQLFORM(db.image).process()
    if form.accepted:
        response.flash = '이미지 업로드 완료'
        redirect(URL('default', 'index'))
    return dict(form=form)

upload_image 함수는 데이터베이스의 image 테이블에 새로운 레코드를 추가하는 역할을 합니다. SQLFORM 함수는 자동으로 HTML 폼을 생성하여 사용자로부터 이미지 파일을 업로드할 수 있는 기능을 제공합니다. 업로드가 완료되면 response.flash 메시지를 표시하고, 사용자를 기본 페이지로 리디렉션합니다.

이미지 및 미디어 파일 표시

웹 페이지에서 이미지나 미디어 파일을 표시하기 위해서는 해당 파일의 경로를 알아야 합니다. web2py에서는 URL 함수를 사용하여 파일의 경로를 생성할 수 있습니다.

예를 들어, default 컨트롤러의 image 액션에서 이미지 파일의 경로를 생성해보겠습니다.

# controllers/default.py

def image():
    image_id = request.args(0)
    record = db.image(image_id)
    path = URL('download', args=record.image)
    return dict(path=path)

위의 코드에서 URL('download', args=record.image) 부분은 download 컨트롤러에게 이미지 파일의 경로를 요청하는 역할을 합니다. args=record.imageimage 테이블의 특정 레코드의 image 필드 값을 전달합니다.

이제, 뷰 파일에서 이미지 파일을 표시하는 코드를 작성합니다.


<!-- views/default/image.html -->
<h2>이미지</h2>
<img src="{{=path}}" alt="image">

src 속성에 path 변수 값을 할당하여 이미지 파일을 표시합니다.

이미지 및 미디어 파일 처리

web2py는 다양한 이미지 처리 라이브러리와 함께 사용될 수 있습니다. 예를 들어, PIL(Python Imaging Library)을 사용하여 이미지를 조작할 수 있습니다.

default 컨트롤러에 이미지를 처리하는 함수를 추가해보겠습니다.

# controllers/default.py

from PIL import Image

def image_processing():
    image_id = request.args(0)
    record = db.image(image_id)
    path = URL('download', args=record.image)
    
    # 이미지 열기
    img = Image.open(path)
    
    # 이미지 크기 변경
    resized_img = img.resize((300, 300))
    
    # 이미지 썸네일 생성
    thumbnail_path = 'path/to/thumbnail/folder' + record.image
    resized_img.save(thumbnail_path)
    
    return dict(thumbnail_path=thumbnail_path)

위의 코드에서는 이미지를 열고, 크기를 변경하여 썸네일을 생성하는 예시입니다. Image.open(path)는 이미지 파일을 열기 위한 함수이며, img.resize((300, 300))는 이미지 크기를 변경하는 함수입니다. 변경된 이미지는 resized_img.save(thumbnail_path)를 통해 저장됩니다.

이제, 뷰 파일에서 생성된 썸네일 이미지를 표시하는 코드를 작성합니다.


<!-- views/default/image_processors.html -->
<h2>이미지 썸네일</h2>
<img src="{{=thumbnail_path}}" alt="thumbnail">

src 속성에 thumbnail_path 변수 값을 할당하여 썸네일 이미지를 표시합니다.

이상으로, web2py에서의 이미지 및 미디어 처리에 대해 알아보았습니다. web2py를 통해 이미지 및 미디어를 업로드하고 표시하며, 필요한 경우 처리하는 것은 매우 간단하고 효과적입니다. web2py의 다른 기능과 결합하여 보다 풍부한 웹 애플리케이션을 개발할 수 있습니다.