Python 미디어 info 기반 그림 파일 이름 바 꾸 기

사례 이야기:
대부분의 컬러 스크린 이 있 는 단말 기 는 핸드폰,자동차,텔레비전 등 이 든 모두 사진 의 표시 와 관련 되 어야 한다.
전문 적 인 멀티미디어 테스트 인원 으로서 우 리 는 규범 화 된 표준 이미지 테스트 파일 이 필요 하 다.
그러나 기 존의 이미지 자원 이름 은 매우 자 유 롭 게 명명 되 었 다.예 를 들 어 IMG20200325_161111.jpg,
이상 의 이름 은 이미지 파일 의 구체 적 인 이미지 인 코딩 형식,해상도 등 정 보 를 볼 수 없습니다.
테스트 매니저 는 나 에 게 대량으로 이름 을 바 꾸 라 고 요구 했다.템 플 릿 은 다음 과 같다.
이미지 인 코딩 형식해상도비트 깊이용기
JPEG_1920x1080_32bit_jpg.jpg
이미지 코딩 기본 지식
사진 인 코딩:특정한 풍경 화면 을 사진 데이터 파일 로 바 꾸 는 과정 에서 촬영 은 반드시 촬영 의 범위 와 관련된다.
그림 디 코딩:그림 데이터 파일 을 화면 에 표시 하 는 과정.
주로 다음 과 같은 기술 파라미터 와 관련된다.
사진 기술 파라미터
매개 변수 해석
예 를 들다
이미지 인 코딩 형식
(압축 기술)
픽 셀 압축 기술
다른 인 코딩 형식,
그 압축 률 은 압축 효과 와 다르다.
JPEG, PNG, GIF, BMP, Webp, RAW, Heic
이미지 해상도
(단위:Pixel)
그림 의 긴 픽 셀 수*그림 의 넓 은 픽 셀 수
4096×2160(4K), 1920x1080,
1280x720,720×480,
640 x480,320 x480 등
심지어 10 억 화소 의 그림 까지 존재 한다.
비트 깊이
(단위:bit)
픽 셀 마다 포 함 된 데이터 크기
8bit, 16bit, 32bit
그림 용기
파일 접미사
.jpg; .png; .gif; .bmp; .heic; .webp 등
우리 가 만난 모든 그림 파일 은 데이터 의 집합 이다.
일반적인 데이터 가 클 수록 그 그림 은 더욱 뚜렷 하 다.
준비 단계
  • 미디어 info.exe 명령 행 도구 가 환경 변수 에 추가 되 었 는 지 확인 합 니 다.
  • 다음은 어떤 그림 파일 의 미디어 정보 입 니 다.모두 텍스트 입 니 다.Python 은 처리 하기 가 매우 간단 할 것 입 니 다.
  • 그림 이름 을 대량으로 바 꾸 려 면 입 출력 파일 구조 로 다음 과 같 습 니 다.
  • 
    	+---Input_Image  #            
    	|    1.jpg
    	|    2.png
    	|    
    	+---Output_Image  #            
    	|    JPEG_1920x1080_32bit_jpg.jpg
    	|	PNG_1280x720_32bit_png.png
    	|
        \image_info.py  #       info     ,
    	\rename_image.py #  image_info.py     ,     
    정의 imageinfo.py 모듈
    비교적 복잡 한 코드 와 관련 되 기 때문에 대상 류 를 대상 으로 하 는 프로 그래 밍 방식 으로 직접 실현 하 는 것 을 권장 합 니 다.
    
    # coding=utf-8
     
    import os
    import re
    import subprocess
     
     
    class ImageInfoGetter():
      '''       Formate,    ,   '''
     
      def __init__(self, image_file):
        '''        ,       mediainfo  '''
        if os.path.exists(image_file):
          self.image_file = image_file
          p_obj = subprocess.Popen('mediainfo "%s"' % self.image_file, shell=True, stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE)
          self.info = p_obj.stdout.read().decode("utf-8") #             
        else:
          raise FileNotFoundError("Not this File!") #             ,    
     
      def get_image_format(self):
        '''       ,  JPEG, PNG, BMP '''
        try:
          image_codec = re.findall(r"Format\s+:\s(.*)", self.info)[-1] #       Format  
          image_codec = image_codec.strip() #        
          if image_codec == "RGB":
            image_codec = "BMP"
        except:
          image_codec = "undef" #            
        return image_codec
     
      def get_image_resolution(self):
        '''        '''
        try:
          image_widget = re.findall(r'Width\s+:\s(.*)pixels', self.info)[-1]
          image_widget = image_widget.replace(" ", "")
          image_height = re.findall(r'Height\s+:\s(.*)pixels', self.info)[-1]
          image_height = image_height.replace(" ", "")
          image_resolution = image_widget + "x" + image_height
        except:
          image_resolution = "undef" #            
        return image_resolution
     
      def get_image_bit_depth(self):
        '''        '''
        try:
          image_bit_depth = re.findall(r"Bit depth\s+:\s(.*bit)s", self.info)[-1].strip()
          image_bit_depth = image_bit_depth.replace(" ", "") #    
        except:
          image_bit_depth = "undef" #            
        return image_bit_depth
     
      def get_image_container(self):
        '''      ,      '''
        _, image_container = os.path.splitext(self.image_file)
        if not image_container:
          raise NameError("This file no extension")
        image_container = image_container.replace(".", "")
        image_container = image_container.lower() #       
        return image_container
     
     
    if __name__ == '__main__':
      #      ,          ,                  '''
      i_obj = ImageInfoGetter("C:\\img.jpg")
      image_format = i_obj.get_image_format()
      print(image_format)
      image_resolution = i_obj.get_image_resolution()
      print(image_resolution)
      image_bit_depth = i_obj.get_image_bit_depth()
      print(image_bit_depth)
      image_container = i_obj.get_image_container()
      print(image_container)
    이미지 호출info.py 모듈 및 대량 이름 바 꾸 기
    
    # coding=utf-8
     
    import os
    import image_info
    from shutil import copyfile
     
    curdir = os.getcwd()
     
    #      ,         
    input_image_path = os.path.join(curdir, "Input_Image")
    filelist = os.listdir(input_image_path) #       
     
    #      ,           
    output_image_path = os.path.join(curdir, "Output_Image")
     
    #     Output_Image     ,        
    if not os.path.exists(output_image_path):
      os.mkdir(output_image_path)
     
    if filelist: #          
      for i in filelist: #       
        #      ,          ,                  '''
        image_file = os.path.join(input_image_path, i)
        i_obj = image_info.ImageInfoGetter(image_file)
        image_format = i_obj.get_image_format()
        image_resolution = i_obj.get_image_resolution()
        image_bit_depth = i_obj.get_image_bit_depth()
        image_container = i_obj.get_image_container()
        new_image_name = image_format + "_" + image_resolution + "_" + image_bit_depth + "_" \
                 + image_container + "." + image_container
        print(new_image_name)
        new_image_file = os.path.join(output_image_path, new_image_name)
        copyfile(image_file, new_image_file) #     
    else:
      print("It's a Empty folder, please input the image files which need to be renamed firstly!!!")
    os.system("pause")
    본 사례 연습 소재 다운로드
    포함:미디어 info.exe(환경 변수 에 버 리 는 것 을 권장 합 니 다),
    각종 인 코딩 형식의 그림 파일,imageinfo.py 모듈,이름 바 꾸 기image.py 일괄 처리 스 크 립 트
    주문 하 다
    실행 효 과 는 다음 과 같 습 니 다:

    이상 에서 알 수 있 듯 이 입 출력 파일 구조의 장점 은 저 는 서로 다른 이름 의 다른 문자 만 필요 합 니 다.
    이름 을 바 꿀 그림 을 Input 에 잃 어 버 립 니 다.Image 폴 더 에서 프로그램 스 크 립 트 를 실행 한 후 Output 보기이미지 출력 파일,
    스 크 립 트 의 운행 이 정상 적 인지,건장 성(잘못 사용)이 요구 에 부합 되 는 지 테스트 하여 이 프로그램 스 크 립 트 에 대해'회색 박스 테스트'를 실현 할 수 있 습 니 다.
    팁:
    예 를 들 어 안 드 로 이 드 폰,구 글 이 출시 했다CDD(Compatibiltiy Definition Document 호환성 정의 문서),.
    그 다섯 번 째 부분 은 많은 그림 디 코딩 형식의 규정 과 관련된다.

    이것 이 바로 안 드 로 이 드 의 가장 주요 한 이미지 멀티미디어 디 코딩 테스트 수요 이다.
    이상 은 Python 이 미디어 info 를 기반 으로 그림 파일 의 이름 을 대량으로 바 꾸 는 상세 한 내용 입 니 다.python 의 이름 을 대량으로 바 꾸 는 파일 에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!

    좋은 웹페이지 즐겨찾기