ZipToVar 과 UnzipToVar 명령어는 입력변수의 데이터를 zip 포맷으로 압축하거나 zip 포맷의 압축데이터에서 특정데이터를 추출하는 명령어입니다. 이 명령어를 추가한 이유는 스마트집 같은 간편한 압축관련 스크립트가 있지만 파일을 거치지 않고 메모리에서 압축하거나 압축해제해서 쓸 수 있는 필요성이 생겨서입니다.
이 명령어를 추가하는데 사용한 zip unzip c++ 소스의 출처입니다. 많은 감사를 표합니다.
http://www.codeproject.com/Articles/7530/Zip-Utils-clean-elegant-simple-C-Win
ZipToVar , OutZipVar, OutZipSize, srcVar, srcSize [, insideName, password]
zip 포멧으로 압축합니다.
압축된 데이터를 파일로 저장하려면 파일오브젝트의 RawWrite() 함수를 사용해야 합니다.
[결과값]
ErrorLevel = 0 : 압축 성공
ErrorLevel = 1 : 소스데이터가 존재하지 않거나 ClipBoard 변수가 지정된 경우
ErrorLevel = 2 : 압축데이터 생성 실패
ErrorLevel = 3 : 압축데이터 추가 실패
[변수]
insideName : 압축데이터 내에 설정될 데이터 식별명(압축파일내의 파일이름)
password : 패스워드
[참고]
ZipToVar 명령어는 아직 기존 압축데이터에 새 데이터 추가를 지원 하지 않습니다. 추후 업데이트 예정입니다.
UnzipToVar , OutUnzipVar, OutUnzipSize, srcZipVar, srcZipSize [, insideName, password]
zip 포멧으로 압축된 데이터를 해제합니다.
[결과값]
ErrorLevel = 0 : 압축해제 성공
ErrorLevel = 1 : 소스데이터가 존재하지 않거나 ClipBoard 변수가 지정된 경우
ErrorLevel = 2 : 압축데이터 열기 실패(또는 패스워드 오류)
ErrorLevel = 3 : 압축데이터 내에서 'insideName' 식별명을 가진 데이터 찾기 실패
ErrorLevel = 4 : 압축해제 실패
[변수]
insideName : 압축데이터에서 해제할 데이터의 식별명(압축파일내의 파일이름)
password : 패스워드
[주의]
해결되지 않은 문제점이 있습니다. 50바이트 내의 특정 데이터를 압축한 경우 압축 해제시에 오류가 발생하는 경우가 있습니다. 원인을 찾는데 시간이 걸릴것 같습니다.
Test.ahk 파일을 다운로드한 'Ahk+ 전용 AutoHotkey.exe 파일' 위에 드래그해서 실행하세요.
<테스트 스크립트>
F1::
imageFile = sample.bmp
FileRead, srcData, *c %imageFile% ;*c 옵션은 파일을 그대로 읽어오는 옵션
FileGetSize, srcSize, %imageFile%
;이미지 데이터를 압축
ZipToVar, zipData, zipSize, srcData, srcSize, abcd.bmp
;이진데이터를 BASE64 문자열 변환
BinToHex, base64Str, zipData, zipSize, *Base64
;텍스트 파일로 저장
FileAppend, % base64Str, sample_base64.txt
MsgBox, 압축이미지데이터를 BASE64 문자열로 변환 후 텍스트 파일로 저장완료!
return
F2::
;F1 키를 눌러 만들어진 BASE64 문자열 텍스트파일 내용을 복사해서 붙여넣었습니다.
imageData = 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
;BASE64 문자열을 압축 이진데이터로 변환
HexToBin, binData, binSize, imageData, *Base64
;압축데이터에서 이미지데이터 추출
UnzipToVar, memBmp, memBmpSize, binData, binSize, abcd.bmp
hBitmap := CreateHBitmapFromVar(memBmp)
;윈도우에 이미지 출력
Gui, Add, Picture, w100 h100 hwndhwndPic 0xE
SetImage(hwndPic, hBitmap)
Gui, Show
return
GuiClose:
ExitApp
;----------------------------------------------------------------------------------
;윈도우에 비트맵 출력
SetImage(hwnd, hBitmap)
{
SendMessage, 0x172, 0x0, hBitmap,, ahk_id %hwnd%
E := ErrorLevel
DllCall("DeleteObject", Ptr,E)
return E
}
;----------------------------------------------------------------------------------
;메모리에 로딩된 BMP파일을 읽어 HBitmap핸들로 반환
CreateHBitmapFromVar(ByRef bmpVar)
{
WinGet, hwnd, ID, ahk_class Progman
hDC := DllCall("USER32\GetDC", Ptr,hwnd, Ptr)
hBMP := DllCall( "CreateDIBitmap", UInt,hDC, UInt,(bmiHAddr:=&bmpVar+14)
,UInt,(CBM_INIT:=4), UInt,&bmpVar+NumGet(&bmpVar,10), UInt,&bmpVar+14, UInt,(DIB_PAL_COLORS:=1) )
DllCall("ReleaseDC", Ptr,hwnd, Ptr,hDC, Uint)
return hBMP
}
'AHK+ 명령어' 카테고리의 다른 글
오토핫키+ RunWait 명령어 기능 확장 (0) | 2015.10.31 |
---|---|
오토핫키+ ImageList 명령어 추가 (2) | 2015.10.11 |
오토핫키+ BinToHex, HexToBin 명령어 추가 (9) | 2015.10.03 |
오토핫키+ URLDownloadToVar 명령어 추가 (0) | 2015.10.01 |
오토핫키+ ImageListSearch 명령어 추가 (4) | 2015.09.29 |