django + PIL 대 django의 미디어 이미지 처리

8481 단어 django
요구 사항 설명
최근에 프로젝트를 하나 하고 있는데 그중에 하나의 수요가 있다. 간단하게 말하면 다음과 같다.
전방에 문자열을 입력하여 백엔드 데이터베이스에서 데이터를 조회하고 조회된 결과와 미디어에 존재하는 이미지 템플릿을 결합하여 새로운 이미지를 생성합니다.마지막으로 결과를 앞쪽으로 되돌려줍니다.
실현 기술
  • django
  • PIL

  • 구덩이
    4
  • django 디렉터리에 있는 그림 파일 읽기
    이 구덩이는 나를 밤새도록 구덩이에 빠뜨렸다. 처음에 나는 상대적인 경로를 사용했고 절대적인 경로를 사용했기 때문에 읽을 수 없었고 웹 페이지에 표시할 수 있었지만 로컬에서 쓴py 스크립트는 실현될 수 없었다.차갑다나중에 대량의 블로그를 뒤적였는데 번거롭지만 실현할 수 있는 방안을 발견했다. 먼저 Requests를 사용하여 그림을 얻은 다음에 조작하는 것이다. 그러나 이렇게 하면 그림의 질이 떨어지고 효율이 비교적 낮다.
    from PIL import Image, ImageDraw, ImageFont
    from io import BytesIO
    import requests
    response = requests.get('http://127.0.0.1:8000/media/1.jpg')
    response = response.content
    BytesIOObj = BytesIO()
    BytesIOObj.write(response)
    image = Image.open(BytesIOObj)
    

    2분 후에...나는 원래 이렇게 간단하다는 것을 발견했다...setting에서 미디어의 경로를 설정한 후에 해당하는 파일에 도입하면 병합된 경로는 접근할 수 있지만 ''의 디코딩 문제에 주의해야 한다.
    # setting.py
    MEDIA_URL = "/media/"
    MEDIA_ROOT = os.path.join(BASE_DIR,"media")
    
    from PIL import Image, ImageDraw, ImageFont
    from xibao.settings import MEDIA_ROOT
    img = MEDIA_ROOT + "\\1.jpg"
    image = Image.open(img)
    

  • 그림 처리 코드
    name = unicode(name ,"utf-8")
       college = unicode(college, "utf-8")
       major = unicode(major, "utf-8")
       img = MEDIA_ROOT + "\\1.jpg" #     
       new_img = MEDIA_ROOT + "\\result\\" + identity + ".jpg" #      
       
       color = "#67625A" #     
    
       #     
       image = Image.open(img)
       draw = ImageDraw.Draw(image)
       width, height = image.size
    
       name_x = 32
       name_y = 263
       name_text_front = ImageFont.truetype(r"C:\Windows\Fonts\simhei.ttf", 21)
       draw.text((name_x, name_y), u'%s' % name, color, name_text_front)
    
       college_x = 99
       college_y = 364
       college_text_front = ImageFont.truetype(r"C:\Windows\Fonts\simhei.ttf", 17)
       draw.text((college_x, college_y), u'%s' % college, color, college_text_front)
    
       major_x = 99
       major_y = 396
       major_text_front = ImageFont.truetype(r"C:\Windows\Fonts\simhei.ttf", 17)
       draw.text((major_x, major_y), u'%s' % major, color, major_text_front)
    
       #     
       image.save(new_img)
    

    마지막으로 앱을 알려드릴게요.
    생각났어...예를 들어 사용자 정의 워터프린트, 포스터 생성에 관한 것이다.

    좋은 웹페이지 즐겨찾기