일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Flutter
- 장고
- pandas
- gifmp4변환
- shortcut
- Django
- python
- 다트
- H264
- 연준
- nginx
- 비트코인
- 아이피
- fed
- 사이트 운영
- 안드로이드코덱
- ffmpeg
- Pillow
- coding
- 이미지변환
- 안드로이드스튜디오
- 플러터
- DB호스팅
- DART
- SNS 개발
- androidstudio
- accesslog
- Firebase
- O'NION
- 웹호스팅
- Today
- Total
누구나 할 수 있다.
django 이미지 변환 및 저장에 관련한 질문 본문
원 출처 : onion.haus/detail/4289
django 이미지 변환 및 저장에 관련한 질문 | O'NION
django 기반 이미지 변환 및 저장에 관련한 질문질문이 들어왔는데 글로 남겨 많은분들이 볼 수 있도록 하는 게 좋겠다 싶어 작성합니다.일단 질문의 요지는 변환된 이미지를 어떻게 저장하고 보
onion.haus
django 기반 이미지 변환 및 저장
질문이 들어왔는데 글로 남겨 많은분들이 볼 수 있도록 하는 게 좋겠다 싶어 작성합니다.
일단 질문의 요지는 변환된 이미지를 어떻게 저장하고 보여줄 것인지 입니다.
강좌에서 진행한 코드의 연장선에서 살펴보겠습니다.
저희는 강좌에서 image 컬럼을 추가하여 해당 컬럼에 업로드 하는 이미지를 저장했습니다.
이 이미지 컬럼만으로는 변환 이미지를 저장할 수 없기 때문에,
가적으로 image_converted 라는 컬럼을 생성해주도록 하겠습니다.
물론 model을 수정했으니 migrate 하는 과정도 진행해주셔야겠죠?
해당 내용은 건너뛰도록 하겠습니다.
그렇다면 이제 이미지를 어떻게 변환하고, 이 컬럼에 할당할지가 문제입니다.
계속 진행하도록 하겠습니다.
첫번째로 Article model 안의 save 메서드를 덮어씌우겠습니다.
def save(self, *args, **kwargs):
self.convert_image()
super(Article, self).save(*args, **kwargs)
위와 같이 기존의 save 를 하기 이전, 자체 메서드 convert_image를 실행시켜줍니다.
그렇다면 convert_image 를 구현해야겠죠?
해당 내용을 구현해줍니다.
def convert_image(self, *args, **kwargs):
image_converted = convert_test(self.image)
self.image_converted = InMemoryUploadedFile(file=image_converted,
field_name="ImageField",
name=self.image.name,
content_type='image/jpeg',
size=sys.getsizeof(image_converted),
charset=None)
위와 같이 convert_image 를 구현했습니다.
django 에서 제공하는 InMemoryUploadedFile 을 사용해서 ImageField인 image_converted 에 이미지를 할당해줍니다.
그럼 위의 코드에서 볼 수 있듯, convert_test 라는 함수에 실제 변환 로직이 들어가는 것을 추측할 수 있겠죠?
해당 내용을 구현해줍니다.
def convert_test(img):
img = Image.open(img)
img = img.convert('RGB')
img = img.resize((100, 100), Image.ANTIALIAS)
return image_to_bytes(img)
def image_to_bytes(img):
output = BytesIO()
img.save(output, format='JPEG', quality=95)
output.seek(0)
return output
convert_image 내에서 간단하게 resize 를 구현했습니다.
안에 들어가는 변환 내용은 어떤 변환이든 상관 없습니다.
그리고 변환된 이미지를 다시 byte 스트림 버퍼로 변환해서 리턴하게 됩니다.
InMemoryUploadedFile 에서 필요한 값이 스트림 버퍼이기 때문에 해 주어야 하는 과정입니다.
그렇게 되면 최종 코드는 아래와 같습니다.
그리고 마지막으로 template 안에 원본 image 뿐만 아니라 image_converted 를 출력하는 태그를 추가하게 되면, 해당 변환 이미지도 정상적으로 출력 되는 것을 확인 할 수 있습니다.
'Django' 카테고리의 다른 글
django 변환 이미지 중복저장 문제 (0) | 2021.02.27 |
---|---|
SNS 제작 프로젝트 : O'NION 중간 경과 (0) | 2021.01.31 |
안드로이드 mp4 파일 재생 불가 / 회색영상 출력 문제 (0) | 2020.11.03 |
Django remote 데이터베이스를 향한 여정.. (0) | 2020.02.05 |