알짜게시판

[Delphi] 파일 포맷 알아내기

[code]
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;
[/code]

번호 제목 글쓴이 조회 날짜
65 [시크릿DNS] 프록시 혼합 사용 예제 1 249,190 08-07
64 [칼무리] 영역화면 크기 오류인 경우 94,414 12-12
63 [그누보드] CKEditor 5 플러그인 91,021 08-11
62 [그누보드] 사이드바 만들기 90,391 05-04
61 [시크릿DNS] Kaspersky 백신 사용시 DNS 암호화 관련 4 83,231 01-04
60 ChangeDNS - DNS 서버를 손쉽게 변경합니다. 71,302 08-13
59 HTTPS/DNS 차단 쉽게 이해하기 61,529 08-16
58 [그누보드] Syntax Highlight 적용하기 60,561 05-19
57 [그누보드] 아이디 대신 이메일로 회원 가입하기 56,701 02-02
56 [그누보드] 훅을 통한 글쓰기, 댓글 알림 56,238 05-26
열람 [Delphi] 파일 포맷 알아내기 50,850 09-08
54 [그누보드] 웹폰트 적용하기 45,484 08-13
53 [PHP] 파일 포맷 알아내기 45,089 08-23
52 [리눅스] 웹서버 상태 확인 후 자동 재시작 쉘 스크립트 40,553 02-28
51 WinDivert 1753 에러 발생시 40,214 12-20
50 WinDivert 서비스 종료 38,889 02-08
49 안종윤님께서 작성해주신 메뉴얼입니다. 72 33,367 10-26
48 [PHP] Porto 테마에서 포스팅만 Loading Overlay 32,797 03-08
47 SP2 팝업차단 무시하고 팝업띠우기?! 2 23,202 07-22
46 [펌] HTTP 에러 코드표 21,650 04-20
45 [PHP] 파일형 멀티(?) 카운터 19,634 08-31
44 운영자가 접속중인 회원에게 1:1 대화 및 채팅방으로 초대 5 19,320 04-26
43 GChat 타이틀 글자 바꾸기 18,317 12-06
42 악성코드 치료 2 17,054 05-30
41 IFRAME 사용시 길호챗이 안될경우 16,780 11-13
40 길호넷에서 제공되는 클립 맹글기!! 16,568 04-22
39 비밀방 개설시 오류가 생기는경우!!! 3 15,179 04-20
38 [펌] DNS설정으로 인터넷 빠르게!(설정법포함) 14,223 04-06
37 시크릿SNI 화이트 리스트 등록하기 2 12,312 06-29
36 윈도우7 에서 WinDivert 2.2 관련 오류 발생시 11,529 07-10
35 ChangeDNS 10,915 10-22
목록