알짜게시판

파일 포맷 알아내기

function GetFormat(Filename: String): String;
 function IsPatten(Buffer: TBytes; Index: Integer; Values: array of Byte): Boolean;
 var
   I: Integer;
 begin
   Result := True;

   for I := Low(Values) to High(Values) do
     if Buffer[I+Index] <> Values[I] then
     begin
       Result := False;
       Break;
     end;
 end;
const
 CheckSize = 12;
var
 Stream: TFileStream;
 Buffer: TBytes;
 FileExt: String;
begin
 Result := '';

 try
   Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
   if Stream.Size > CheckSize then
   begin
     SetLength(Buffer, CheckSize);
     Stream.ReadBuffer(Buffer, CheckSize);

     if IsPatten(Buffer, 0, [$FF, $D8, $FF]) then Result := 'JPG'
     else if IsPatten(Buffer, 0, [$42, $4D]) then Result := 'BMP'
     else if IsPatten(Buffer, 0, [$47, $49, $46, $38]) then Result := 'GIF'
     else if IsPatten(Buffer, 8, [$57, $45, $42, $50]) then Result := 'WEBP'
     else if IsPatten(Buffer, 0, [$49, $20, $49]) then Result := 'TIFF'
     else if IsPatten(Buffer, 0, [$49, $49, $2A, $00]) then Result := 'TIFF'
     else if IsPatten(Buffer, 0, [$4D, $4D, $00, $2A]) then Result := 'TIFF'
     else if IsPatten(Buffer, 0, [$4D, $4D, $00, $2B]) then Result := 'TIFF'
     else if IsPatten(Buffer, 0, [$38, $42, $50, $53]) then Result := 'PSD'
     else if IsPatten(Buffer, 0, [$49, $49, $55, $00]) then Result := 'RAW'
     else if IsPatten(Buffer, 4, [$66, $74, $79, $70, $68, $65, $69, $63]) then Result := 'RAW'
     else if IsPatten(Buffer, 0, [$25, $50, $44, $46]) then Result := 'PDF'
     else if IsPatten(Buffer, 0, [$89, $50, $4E, $47, $0D, $0A, $1A, $0A]) then Result := 'PNG';
   end;
   Stream.Free;
 except
   on e: Exception do
   begin
   end;
 end;
end;

로그인 후 댓글내용을 입력해주세요

제목 글쓴이 조회 날짜
델파이 TDirectory.Delete 대신 CMD 으로 폴더 삭제 74,831 25-09-10
델파이 폼이 모니터 한 가운데 있는 경우 자연스럽게 왼쪽으로 이동시키기 134,397 25-05-26
델파이 TrayIcon 이 흐릿하게 보이는 버그? 수정 128,801 24-12-12
델파이 실행 중인 프로세스가 활성 창인지 확인하는 함수 146,138 24-11-02
델파이 메세지 다이어그램(Message Dialog) 에 체크박스(CheckBox) 추가 133,060 24-10-30
델파이 윈도우 알림센터에 메시지 출력하기 56,228 23-06-20
델파이 중복 실행 방지 59,613 22-09-21
델파이 파일 포맷 알아내기 51,996 22-09-08
델파이 권한상승 2,798 20-09-04
델파이 Glyph 에 사용할 이미지 생성하기 2,284 20-09-02
델파이 bsNone 인 폼에서 드래그 및 크기조절 3,838 20-07-11
목록
건강정보웹프로그래밍결혼준비광고의비밀결혼의신