9일차 연습문제(Pillow)

송용진·2024년 3월 1일
  • Pillow
    • 실습 예제
      • 예제 1 : 이미지 열기 및 저장
        from PIL import Image
        
        # 이미지 열기
        image = Image.open("input.jpg")
        # 이미지 저장
        image.save("output.jpg")
      • 예제 2 : 이미지 회전
        from PIL import Image
        
        # 이미지 열기
        image = Image.open("input.jpg")
        
        # 이미지 90도 회전
        rotated_image = image.rotate(90)
        
        # 회전된 이미지 저장
        rotated_image.save("rotated.jpg")
      • 예제 3 : 이미지 흑백 변환
        from PIL import Image
        
        # 이미지 열기
        image = Image.open("input.jpg")
        
        # 이미지를 흑백으로 변환
        bw_image = image.convert("L")
        
        # 흑백 이미지 저장
        bw_image.save("black_and_white.jpg")
      • 예제 4 : 이미지 크롭
        from PIL import Image
        
        # 이미지 열기
        image = Image.open("input.jpg")
        
        # 이미지 크롭 (left, top, right, bottom)
        cropped_image = image.crop((100,100,400,400)) 
        													#((x,y,x,y))
        										#좌측 상단 모서리의 x,y 좌표 / 우측 하단 모서리의 x,y 좌표
        
        #크롭된 이미지 저장
        cropped_image.save("cropped.jpg")
      • 예제 5 : 이미지에 텍스트 추가
        from PIL import Image, ImageDraw, ImageFont
        
        # 이미지 열기
        image = Image.open("input.jpg")
        draw = ImageDraw.Draw(image)
        
        # 사용할 폰트 정의
        #font = ImageFont.truetype("arial.ttf",size = 45)
        
        # 기본 폰트 사용
        font = ImageFont.load_default()
        
        # 이미지에 텍스트 추가 (x,y, message, fill=color, font = font)
        draw.text((10,10), "Hello, World!", fill=white, font = font)
        
        # 텍스트가 추가된 이미지 저장
        image.save("text_added.jpg") 
        '''
        ImageDraw.Draw 객체를 사용하여 이미지를 수정하면 
        해당 이미지 객체(image)가 직접적으로 수정되기 때문에 
        image.save()를 사용하여 이미지를 저장
        '''
        
        '''
        ImageDraw.Draw()는
        PIL의 ImageDraw 모듈 안에 있는 Draw 클래스의 *생성자를 지칭합니다. 
        이 생성자는 이미지에 그리기 작업을 수행할 수 있는 ImageDraw 객체를 생성합니다. 
        
        *생성자 : 생성자는 클래스의 특수한 종류의 메서드
        클래스의 인스턴스를 생성할 때 호출되며,
        객체를 초기화하고 필요한 속성을 설정합니다.
        '''
      • 예제 6 : 이미지 필터 적용
        from PIL import Image, ImageFilter
        
        # 이미지 열기
        image = Image.open("input.jpg")
        
        # 이미지에 가우시안 블러 필터 적용
        blurred_image = image.filter(ImageFilter.GaussianBlur(5))
        
        # 필터가 적용된 이미지 저장
        blurred_image.save("blurred.jpg")
      • 예제 7 : 배치 이미지 사이즈 조정
        import os
        from PIL import Image
        
        input_folder = 'input_images/'
        output_folder = 'output_images/'
        
        # 입력 폴더 내의 모든 이미지 파일에 대해 반복
        for filename in os.listdir(input_folder):
        	if filename.endswith(".jpg"):
        		img_path = os.path.join(input_folder, filename)
        		img = Image.open(img_path)
        		
            # 이미지 사이즈 조정
        		resized_img = img.resize((128,128))
        
        		# 조정된 이미지 저장
        		resized_img.save(os.path.join(output_folder, filename))	
        
      • 예제 8 : 이미지 색상 분석
        from PIL import Image
        from collections import Counter
        
        # 이미지 열기
        image = Image.open("input.jpg")
        
        # 이미지의 모든 픽셀 값 가져오기
        pixels = list(image.getdata())
        
        # 가장 흔한 색상 10개 찾기
        most_common_colors = Counter(pixels).most_common(10)
        
        print(most_common_colors)
      • 예제 9 : 이미지 대비 증가
        from PIL import Image, ImageEnhance
        
        # 이미지 열기
        image = Image.open("input.jpg")
        
        # 대비 조정 객체 생성
        enhancer = ImageEnhance.Contrast(image)
        
        # 대비를 2로 증가
        enhanced_image = enhancer.enhance(2)
        
        # 대비가 증가된 이미지 저장
        enhanced_image.save("enhanced_contrast.jpg")
    • 실습 문제
      • 1번 이미지 파일을 열고,
        현재 사이즈를 출력한 다음,
        사이즈를 반으로 줄인 후 저장하세요.
        • 송용진의 코드
          from PIL import Image
          
          # 이미지 파일을 열고
          image = Image.open("img.jpg")
          
          # 현재 사이즈를 출력
          width, height = image.size
          print(f"현재 사이즈는 너비{width}, 높이{height} ")
          
          # 사이즈를 반으로 줄인 후 저장
          resized_image = image.resize((int(width/2), int(height/2)))
          resized_image.save("resized_image.jpg")
      • 2번 주어진 이미지에 대하여
        색상을 흑백으로 변환하고,
        대비를 증가시킨 다음 저장하세요.
        • 송용진의 코드
          from PIL import Image, ImageEnhance
          
          img = Image.open("img.jpg")
          
          # 색상을 흑백으로 변환
          bw_img = img.convert("L")
          bw_img.show()
          
          # 대비를 증가
          enhancer = ImageEnhance.Contrast(bw_img) # 인스턴스 생성
          enhanced_bw_img = enhancer.enhance(5.0) # 대비를 5 증가시킨다.
          enhanced_bw_img.show()
          
          # 저장
          enhanced_bw_img.save("enhanced_bw_img.jpg")
      • 3번 디렉토리 내 모든 이미지에 대해 썸네일을 생성하고,
        각 이미지의 이름 옆에 "_thumbnail"을 추가하여 저장하세요.
        썸네일의 최대 크기는 100x100 픽셀로 설정하세요.
        • 송용진의 코드

          import os
          from PIL import Image
          
          output_folder = 'thumbnails/' # 썸네일을 저장할 폴더의 주소
          for filename in os.listdir(): # 현재 디렉토리의 모든 파일에 대해서
          	if filename.endswith(".jpg"): # 파일명이 .jpg로 끝나는 파일에 한해서
              	img = Image.open(filename)
                  thumbnail = img.resize((100,100)) # 썸네일의 최대 크기는 100x100 픽셀로 설정
                  thumbnail.save(output_folder + filename[:-4] + "_thumbnail" + filename[-4:])
          				# 각 이미지의 이름 옆에 "_thumbnail"을 추가하여 저장
profile
개발자

0개의 댓글