티스토리 뷰
반응형
프로그래밍 하다 보면, 이미지 파일의 크기를 축소해서 서버에 업로드 해야 하는 경우가 많습니다.
특히, 썸네일을 만들어야 할 경우 반드시 축소를 해야 합니다.
아래 함수는 실제 적용해서 사용중인 함수입니다만 보장은 할 수 없습니다.
필요하신 분은 복사해서 활용하여 보시고, 보완해야 할 부분이 있으면 댓글을 올려 주시면 감사합니다.
[ 필수 uses 절 ]
Graphics, Imaging, GraphUtil
[ 함수 정의 ]
// 사이즈 조정
// aSourceImageFile : 원본파일명
// aResultPngFile : 축소파일명
// ThumbnailSize : 축소사이즈
function ResizeImageFile(aSourceImageFile, aResultPngFile: String; ThumbnailSize: Integer): Boolean;
// 파일사이즈 구하기
function FileSize(FileName: string): Int64;
[ 함수 본문 ]
//
// Picture 리사이징. 가로MAX = ThumbnailSize.
// aSourceImageFile : 소스 파일명
// aResultPngFile : 리사이즈 파일명
// ThumbnailSize : 조정 가로 사이즈
// 성공여부 반환값
function ResizeImageFile(aSourceImageFile, aResultPngFile: String; ThumbnailSize: Integer): Boolean;
var
ImageExt: string;
graphicSource: TGraphic;
bmpSource: TBitmap;
pngThumbnail: TPngObject;
bmpThumbmail: TBitmap;
fScale: Double;
begin
Result := False;
if not FileExists(aSourceImageFile) then
begin
ShowMessage(aSourceImageFile + ' 파일이 존재하지 않습니다.');
exit;
end;
ImageExt := lowercase(ExtractFileExt(aSourceImageFile));
if (ImageExt = '.jpg') or (ImageExt = '.jpeg') then
graphicSource := TJpegImage.Create
else if ImageExt = '.png' then
graphicSource := TPngObject.Create
else if ImageExt = '.gif' then
graphicSource := TGIFImage.Create
else if ImageExt = '.bmp' then
graphicSource := TBitmap.Create
else
exit;
pngThumbnail := TPngObject.Create;
bmpThumbmail := TBitmap.Create;
try
graphicSource.Loadfromfile(aSourceImageFile);
if ImageExt = '.bmp' then
bmpSource := TBitmap(graphicSource)
else
begin
bmpSource := TBitmap.Create;
bmpSource.Assign(graphicSource);
end;
// 축소할 필요가 없을경우 나감
if (ThumbnailSize >= bmpSource.Height) and (ThumbnailSize >= bmpSource.Width) then
begin
pngThumbnail.Assign(bmpSource);
pngThumbnail.SaveToFile(aResultPngFile);
Result := True;
exit;
end;
if bmpSource.Width >= bmpSource.Height then
fScale := ThumbnailSize / bmpSource.Width
else
fScale := ThumbnailSize / bmpSource.Height;
// GraphUtil
ScaleImage(bmpSource, bmpThumbmail, fScale);
pngThumbnail.Assign(bmpThumbmail);
pngThumbnail.SaveToFile(aResultPngFile);
Result := True;
finally
if graphicSource <> bmpSource then
bmpSource.Free;
graphicSource.Free;
pngThumbnail.Free;
bmpThumbmail.Free;
end;
end;
[ 함수 본문 ]
//
// 파일사이즈 구하기
// FileName 대상파일명
// 반환값 : 파일사이즈
function FileSize(FileName: string): Int64;
var
sr: TSearchRec;
begin
if FindFirst(FileName, faAnyFile, sr) = 0 then
Result := Int64(sr.FindData.nFileSizeHigh) shl 32 + Int64(sr.FindData.nFileSizeLow)
else
Result := 0;
FindClose(sr);
end;
반응형
'프로그래밍' 카테고리의 다른 글
[Delphi] 델파이 음력 양력 변환 함수 (0) | 2023.02.07 |
---|---|
[Delphi] 델파이 폼위치 기록 INI파일 이용하여 위치저장 및 복구 함수 (0) | 2023.02.06 |
[Delphi] 델파이 PC명칭 OS버젼 MAC주소 HDD볼륨 구하는 함수 (0) | 2023.02.06 |
[Delphi] 델파이 내부IP 외부IP 구하는 함수 (0) | 2023.02.06 |
[Delphi] 델파이 도메인을 IP로 변환하는 함수 (0) | 2023.02.06 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 성북동부자마을
- 통화매니저 #KT통화매니저 #발신자정보표시 #고객관리 #콜백문자 #문자보내기
- 유기농건강차
- 가정용전기드라이버
- 문자보내기 #PC문자보내기 #콜백문자 #콜백서비스 #자동문자 #통화매니저
- 와룡공원드라마촬영장소
- 명륜유치원
- 소형전기드릴
- 미니드릴
- 부재중문자
- 델파이
- 고객관리 #회원관리 #휴대폰주소록 #문자보내기 #콜백문자 #콜백서비스 #자동문자 #통화매니저
- 전화특허
- 고객이음 #문자보내기 #단체문자 #고객관리 #회원관리 #콜백문자 #콜백서비스 #자동문자
- 전화번호대시넣기
- 소형전동드릴
- 그레이엄빌
- 폼위치저장
- 가정용전동드라이버
- 내부IP구하기
- 도메인IP변환
- 가정용전기드릴
- Hexa문자열변환
- 동부시립병원
- 통화매니저
- 한양도성둘레길
- 외부IP구하기
- 델파이날짜연산 #델파이날짜함수 #날짜연산 #날짜함수 #델파이
- 선물하기좋은차
- 성북동판자촌
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함