Sign in to follow this  
Followers 0
RichE

Watermarking an image

23 posts in this topic

Hi Guys and Gals,

is there a udf to work with images, specifically watermarking images, either individually or in batch

thanks in advance

RichE


RichE

[font="'Arial Narrow';"]Current projects[/font]

[font="'Arial Narrow';"]are on my site [/font]Sellostring

Share this post


Link to post
Share on other sites



We have GDI+ that comes with AutoIt.


----------------------------------------

:bye: Hey there, was I helpful?

----------------------------------------

My Current OS: Win8 PRO (64-bit); Current AutoIt Version: v3.3.8.1

Share this post


Link to post
Share on other sites

This post provides some info on using GDI+ to make a transparent watermark. I've not used it myself, but it may point you in the right direction.


√-1 2^3 ∑ π, and it was delicious!

Share this post


Link to post
Share on other sites

#4 ·  Posted (edited)

Try this:

;coded by UEZ
#include <GDIPlus.au3>

_GDIPlus_Startup()
$sIn = StringReplace(@AutoItExe, "autoit3.exe", "Examples\GUI\msoobe.jpg") ;this will not work when script is compiled
$sOut = @ScriptDir & "\Watermarked.jpg"
FileDelete($sOut)

$r = _GDIPlus_WatermarkImage($sIn, $sOut, "Watermarked by UEZ", 50, 50, 2,  "Arial", 64, 0, 100)

_GDIPlus_Shutdown()

If $r Then ShellExecute($sOut)
Exit

;======================================================================================
; Function Name:        _GDIPlus_WatermarkImage
; Description:              adds a text to an image
;
; Parameters:               $sBitmapFile: image file to load
;                                       $sSave: filename for saved image -> if no extension (jpg, bmp, png, gif, tif) is given the default is png image format
;                                       $sText: text string to draw onto the image
;                                       $iX: x position of the text on the image
;                                       $iY: y position of the text on the image
;
;Optional:                  $iPos:  possition text to one of 9 possitions on the image. If set $iX and $iY will be ignored!
;                                                   0: turned off
;                                                   1: upper left,          2: upper mid,           3: upper right
;                                                   4: mid left,                5: center,              6: mid right
;                                                   7: buttom left,         8: buttom mid,      9: buttom right
;                                       $sFontName: font name to use, default is Arial
;                                       $iFontSize: size of the font, default is 16
;                                       $fAngle:  angle of the text -> 0° - 359°
;                                       $iAdjY: adjust y position of the text when $iPos is selected
;                                       $iAdjX: adjust x position of the text when $iPos is selected
;                                       $iFontColor:  color of the text
;                                       $fAlpha:  alpha channel of the text  -> 0.0 (transparent) - 1.0 (opaque)
;                                       $iJPGQuality: JPG save quality -> 0 (worst) - 100 (best)
;
; Requirement(s):       GDIPlus.au3
; Return Value(s):      Success: 1 or the handle of the bitmap (don't forget to dispose it when done!)
;                                       Error:
; Error codes:              1: image file to load not found
;                                       2: unable to create bitmap from loaded image
;                                       3: unable to save watermarked image
;
; Remark:                       don't forget to start _GDIPlus_Startup() / _GDIPlus_Shutdown()
;
; Author(s):                    UEZ
; Version:                      v1.00 Build 2012-10-31 Beta
;=======================================================================================
Func _GDIPlus_WatermarkImage($sBitmapFile, $sSave, $sText, $iX, $iY, $iPos = 0, $sFontName = "Arial", $iFontSize = 16, $fAngle = 0, $iAdjY = 0, $iAdjX = 0, $iFontColor = 0xFFFFFF, $fAlpha = 0.04, $iJPGQuality = 90, $bLineBreak = True)
    If Not FileExists($sBitmapFile) Then Return SetError(1, 0, 0)
    Local $hBitmap = _GDIPlus_BitmapCreateFromFile($sBitmapFile)
    If Not $hBitmap Then Return SetError(2, 0, 0)
    If $fAlpha < 0 Then $fAlpha = 0
    If $fAlpha > 1 Then $fAlpha = 1
    Local $iW = _GDIPlus_ImageGetWidth($hBitmap) , $iH = _GDIPlus_ImageGetHeight($hBitmap)
    Local $hCtxt = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    Local $hBrush = _GDIPlus_BrushCreateSolid(BitShift(Int($fAlpha * 0xFF), -24)  + $iFontColor)
    Local $hFormat = _GDIPlus_StringFormatCreate()
    Local $hFamily = _GDIPlus_FontFamilyCreate($sFontName)
    Local $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, 0)
    Local $tLayout = _GDIPlus_RectFCreate(0, 0, 0, 0)
    Local $aMeasure = _GDIPlus_GraphicsMeasureString($hCtxt, $sText, $hFont, $tLayout, $hFormat)
    Local $iWTxt = Ceiling(DllStructGetData($aMeasure[0], "width") )
    Local $iHTxt = Ceiling(DllStructGetData($aMeasure[0], "height"))
    If Not $fAngle Then
        _GDIPlus_GraphicsSetSmoothingMode($hCtxt, 2)
        DllCall($ghGDIPDll, "uint", "GdipSetTextRenderingHint", "handle", $hCtxt, "int", 4)
        If $bLineBreak And $iWTxt > $iW Then
            DllStructSetData($tLayout, "width",  $iW)
            DllStructSetData($tLayout, "height", 0)
            $aMeasure = _GDIPlus_GraphicsMeasureString($hCtxt, $sText, $hFont, $tLayout, $hFormat)
            $iWTxt = Ceiling(DllStructGetData($aMeasure[0], "width") )
            $iHTxt = Ceiling(DllStructGetData($aMeasure[0], "height"))
        EndIf
        If Not Int($iPos) Or Int($iPos) > 9 Then
            DllStructSetData($tLayout, "x", $iX)
            DllStructSetData($tLayout, "y", $iY)
            _GDIPlus_GraphicsDrawStringEx($hCtxt, $sText, $hFont, $tLayout, $hFormat, $hBrush)
        Else
            DllStructSetData($tLayout, "x",  $iAdjX)
            DllStructSetData($tLayout, "width", $iW)
            Switch $iPos
                Case 1 To 3
                    DllStructSetData($tLayout, "y", $iAdjY)
                    _GDIPlus_StringFormatSetAlign($hFormat, $iPos - 1)
                Case 4 To 6
                    DllStructSetData($tLayout, "y", ($iH - $iHTxt) / 2 + $iAdjY)
                    _GDIPlus_StringFormatSetAlign($hFormat, $iPos - 4)
                Case 7 To 9
                    DllStructSetData($tLayout, "y", $iH - $iHTxt + $iAdjY)
                    _GDIPlus_StringFormatSetAlign($hFormat, $iPos - 7)
            EndSwitch
            _GDIPlus_GraphicsDrawStringEx($hCtxt, $sText, $hFont, $tLayout, $hFormat, $hBrush)
        EndIf
    Else
        Local $iQ
        $fAngle = Mod($fAngle, 360)
        $iW = Int(DllStructGetData($aMeasure[0], "width") * 2)
        $iH = Int(DllStructGetData($aMeasure[0], "height") * 2)
        If $iW > $iH Then
            $iQ = $iW
        Else
            $iQ = $iH
        EndIf
        Local $hBitmap_Rot = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iQ, "int", $iQ, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0)
        $hBitmap_Rot = $hBitmap_Rot[6]
        Local $hCtxt_Rot = _GDIPlus_ImageGetGraphicsContext($hBitmap_Rot)
        _GDIPlus_GraphicsSetSmoothingMode($hCtxt_Rot, 2)
        DllCall($ghGDIPDll, "uint", "GdipSetTextRenderingHint", "handle", $hCtxt_Rot, "int", 4)
        Local $hMatrix = _GDIPlus_MatrixCreate()
        _GDIPlus_MatrixTranslate($hMatrix, $iQ / 2, $iQ / 2)
        _GDIPlus_MatrixRotate($hMatrix, $fAngle, False)
        _GDIPlus_MatrixTranslate($hMatrix, -$iQ / 2, -$iQ / 2)
        _GDIPlus_GraphicsSetTransform($hCtxt_Rot, $hMatrix)
        DllStructSetData($tLayout, "x", $iQ / 2)
        DllStructSetData($tLayout, "y", $iQ / 2)
        _GDIPlus_GraphicsDrawStringEx($hCtxt_Rot, $sText, $hFont, $tLayout, $hFormat, $hBrush)
        _GDIPlus_GraphicsDrawImageRect($hCtxt, $hBitmap_Rot, $iX - $iQ / 2, $iY - $iQ / 2, $iQ, $iQ)
        _GDIPlus_MatrixDispose($hMatrix)
        _GDIPlus_GraphicsDispose($hCtxt_Rot)
        _GDIPlus_BitmapDispose($hBitmap_Rot)
    EndIf
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hCtxt)
    $tLayout = 0
    If $sSave <> "" Then
        Local $bRes
        If StringRight($sSave, 4) = ".jpg" Then
            Local Const $sCLSID = _GDIPlus_EncodersGetCLSID("JPG")
            Local $tParams = _GDIPlus_ParamInit(1)
            Local $tData = DllStructCreate("int Quality")
            If $iJPGQuality < 0 Then $iJPGQuality = 0
            If $iJPGQuality > 100 Then $iJPGQuality = 100
            DllStructSetData($tData, "Quality", $iJPGQuality)
            Local $pData = DllStructGetPtr($tData)
            _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData)
            Local Const $pParams = DllStructGetPtr($tParams)
            $bRes = _GDIPlus_ImageSaveToFileEx($hBitmap, $sSave, $sCLSID, $pParams)
            $tData = 0
            $tParams = 0
        Else
            StringRegExp($sSave, ".*.(gif|png|bmp|tif)", 1)
            If @error Then
                If StringRight($sSave, 1) = "." Then
                    $sSave &= "png"
                Else
                    $sSave &= ".png"
                EndIf
            EndIf
            $bRes = _GDIPlus_ImageSaveToFile($hBitmap, $sSave)
        EndIf
        _GDIPlus_BitmapDispose($hBitmap)
        If Not $bRes Then Return SetError(3, 0, 0)
        Return 1
    EndIf
    Return $hBitmap
EndFunc

Edit1: forgot 2 lines which are added now

Edit2: added some more features

Edit3: the backslashes were gone - added again

Br,

UEZ

Edited by UEZ
1 person likes this

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

There we have it... The GDI Dude UEZ !!!


----------------------------------------

:bye: Hey there, was I helpful?

----------------------------------------

My Current OS: Win8 PRO (64-bit); Current AutoIt Version: v3.3.8.1

Share this post


Link to post
Share on other sites

There we have it... The GDI Dude UEZ !!!

You forgot the + ;)

Br,

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

#7 ·  Posted (edited)

misunderstood

I made watermark for the GUI

have a look if anyone is interested

#include <WinAPI.au3>

$hGUI=GUICreate('Hello')
$_Path=@ScriptDir&'TC3.jpg'
If Not FileExists($_Path) Then _FileInstallEx(JpgBin(),$_Path)
CreateWaterMarkGUI($hGUI,$_Path)
GUICtrlCreateEdit('Hello',10,10,100,300)
GUISetState()

While GUIGetMsg()<>-3
Sleep(10)
WEnd


Func CreateWaterMarkGUI($hWnd,$nPic)
Local $Struct=_WinAPI_GetClientRect($hWnd)
Local $_Pos[4]
For $i=0 To 3
$_Pos[$i]=DllStructGetData($Struct,$i+1)
Next
$hMain = GUICreate("", $_Pos[2], $_pos[3], $_pos[0], $_pos[1], 0x80000000, BitOR(0x00000008, 0x00000040,0x00000020),$hWnd)
GUISetBkColor(0xABCDEF) ;Set GUI Colour
GUICtrlCreatePic($nPic,0,0,$_pos[2],$_pos[3])
WinSetTrans($hMain,'',15)
GUISetState(@SW_SHOWNOACTIVATE)
GUISwitch($hWnd)
Return $hMain
EndFunc


; #FUNCTION# ====================================================================================================================
; Name...........: _FileInstallEx
; Description....: Writes the Binary Data into a File
; Syntax.........: _FileInstall($sBinData, $sFile [, $sRecurse = 0])
;                  $sBinData  - The Binary Data to Write to
;                  $sFile    - The File to Write the Binary Data
;    $sRecurse  - Overwrite If exist already [Default 0]
; Return values..:
; Author.........: Phoenix XL
; Modified.......:
; Remarks........:
; Related .......:
; Link...........:
; Example........:
; ===============================================================================================================================
Func _FileInstallEx($sBinData, $sFile, $sRecurse = 0)
If StringInStr(FileGetAttrib($sFile), 'D', 2) Then Return SetError(1, 0, -1)
If FileExists($sFile) Then
If $sRecurse Then
FileSetAttrib($sFile, '-RS', 1)
Else
SetError(2, 0, -1)
EndIf
EndIf
Local $hFile = FileOpen($sFile, 16 + 8 + 2)
FileWrite($hFile, $sBinData)
If @error Then Return SetError(4, 1, @error)
FileClose($hFile)
If @error Then Return SetError(3, 1, @error)
Return 1
EndFunc   ;==>_FileInstall

Func JpgBin()
Local _
$JpgBin = '0xFFD8FFE000104A46494600010101012C012C0000FFDB0043000503040404030504040405050506070C08070707070F0B0B090C110F1212110F111113161C1713141A1511111821181A1D1D1F1F1F13172224221E241C1E1F1EFFDB0043010505050706070E08080E1E1411141E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1EFFC0001108012C01C203011100021101031101FFC4001D000100010501010100000000000000000000050203040607080109FFC4005410000103030105050407050407030A070001020304000511060712213141131422516132427181081523526291A1334372B1D18292C1E116243473A2B2F01753C225263554637483A3B3D3446494B4C3D2F1FFC4001B01010002030101000000000000000000000002030104050607FFC4004111010001030105030A04030606030000000001020311041221314151051361062232718191A1B1D1F04252C1E11433621534728292F1072353A2C2D21624B2FFDA000C03010002110311003F00F6382A4F3CA8798E7F3A0AC104020820F5141F68140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A050282852F8EEA464F5F21F1A0617F7FF4A0AE82828E3BC93BA7AF91A02563'
    $JpgBin &= '212AF093CBC8FC282BA05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05052A504F33CF97AD053852C78B291E439D05600030060507DA050283E1008C1191414E149E5E21E479D07D4A82B91E5CFD282AA05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A050282DEF957B18C7DE3CBE5E741525213C7893D49E74155028140A050281414A9215C791E845053BE53EDE31F7872F9F9505CA05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028141429601DD1C55E4283E04957159CFE11CBFCE82E5028140A05028140A050281416CA4A78B7C3F09E5FE541525409C1E0AF234155028140A050445FB52E9DD3E80BBF5FED56A4AB919B31B641F86F114109FF699A317FEC77393731F7AD96E93353F9B2DA8507DFF00B47D3DD20EAA23CC696B8FFF006283E0DA569549FF005855EA1A7AAE5D8673081F152D9091F9D06759B5D68ABD49116D5AB2C73251FDC333DB53A3FB19DE1F9506C940A05028140A05028140A05028140A05028140A05028312E770816C8AA95729B1A1C74FB4EC8752DA07C4A88141AC9DA768257089A9E15CD5F76D9BD355F93016681FF0068FA748CA61EA958'
    $JpgBin &= 'F34E97B8FF00F6283E1DA469B4FED23EA56879B9A66E2903E24B18141722ED2740BEFA63FF00A61656242CE12C4996961D27CB71C2159F4C506D4CB8DBCD25D6569710A194A927208F4341728140A0507C5109192702828F12BF0A7F53FD282B4A424600A0FB40A05028140A05028140A05028141F1490A1822828F1279F893FA8FEB415A4850C83914115A8AFF65D3B09332F772621B4B5F66DF68AF1BAB3C90DA47896B3D129049E82835A73536ADBD6469BD3E8B5443CAE17D0A0B23EF222208591E8EAD950FBA6830A4E989770F16A4D517CBB13CD86A4983187A0447DC5293E8E2DCF89A0FB6AB0D86C2B52EC961B55B5C57B4E458686D6A3E6A52402A3EA4D18CB5ADA245DA3DD9691A575CC3D3ED0461417674C9754AF3DF5AF0072E0119F53432E437BD9EEDF5E714B6B6D2EB84F40EBD147E4D820567065AE4AD23F49BB61ED226BC9D72239066FAE1CFC9E09158C1946DE757FD22AD110A357595FBEDB9BE2E26E7638F3E363F13884103FBD4657F467D20A3405A112B4E4DB0EE9C76DA5AE4B8ED37F084F7691D47E205077DD9DEDBD17E534C5AAF76AD4CB56077192916ABB7C1295931E42FF00854D2683ABE9CD6364BE4D55B5A79E83754237DCB64F68C794848E6A0857B68CF0DF46F20F451A0D928140A05028140A05028140A050281418D365468311D99324331A3B282B75E796108424732A51E000F334'
    $JpgBin &= '1A72F5DC9BB1DCD17607EF283CAE32966240F8A5C29538E8F2534DAD07EF8A0C57AD1A9EE637B50EAF96DB679C3B2B7DC5AC791732B7C9FC497119FBA2831A3690D2F025098CE9F80ECD1FFE325B7DE657CDE7779C3F35518CAD6B356AB9B6931B4DDFE259E5EF7FB44881DEC04E3925256900F2E27787A50CB8B6A2D0DB7A9AB52D1B6B3F06A29863FF00922865A9CDD07F491884B91769B2676392517D92927E4B481FAD6706580FDDFE94F63614D4B379BAC5C616D18D1AE4950F5484AD58F8D6194558B6DF32CF705B57BD056C85292AFB672C4EBF639455E6E762ADD59F4523141DB367FF00483B7CF536C46D60D874E0770D5D1D31CA8F9227464F6691FEF1A2A3E741DAAD5B41B538F478B7F8F234E49925298FDF548316493EC8664A0969655D12541647B828375A0A0AF2709193D4F4140423077947795E7415D028140A05028140A05028140A05028140A0F8480324E00A0E5BA8B692EDCAE8D59740B02E125FCE2706FB46D69070A5328DE487520F02F29486527805AD7F6642734968B66DB3957CBCB8A9F7E793BAE4B79D2F2D20F1284B842709CFB884B6DF23D9839243667D3E9411F2134451CF20A8E050632E138BF79228CE161CB438BFDF207C8D67261655647FDD79A3F1C8A64C2816EB94658719077872536BE3596103A9B47E8BD5AA2CEB1D2B024485F0EF819EC640F8B88C2FF5C7A5630CE5C7F5FF'
    $JpgBin &= '00D154A12E4BD0B7C2BC71102E4464FA25E48C7C0293F155619695075EEBCD012D9D29B4BB148BCDB58585B516E6A5090C63807624A49DE491D1495103924A79D07A47665B4B372B477FB1DC25EAEB23407798AEA00BD5B07E240E12903A11F6870705E5720EBB64BB5BAF96D66E96998CCC84F025B79A5641C12083E44104107882082011412140A05028140A05028140A050689AFB68D6DD36E396F86DA6E578494214C2564371D4BFD9879694A8852BDD69095BABF710A19202334FE8FBBEA394CDF35F3CA94B4283B1603A809698239292C02A436474528BAE8E0438DE4B603A03ADA509DD48C0A0C0909E74451D213924506239156BEA91F134670B0E5A9C5FEF503E46A46160D8DEF75F6CFC41158C985B5D9E6A38A3B3591F75583FAE29930C1BE5AEDD788C216ADD3F0EF1140C0EF9192E291FC2A2381F5073EB5961CBB5AFD18748DE5854ED197293637D637931DE2644627CB89DF471EBBCAC79545272E6A0ED73626F3B1AE296D5A71D250F32F8EF96B9693CD3B87D92AF23B8A3D7850764D8E6D52DF7A4B703474945BE6A78AB4B5D64A8C77C0E7DCA41C96B97068828006021232BA0EEFA4F53DBB50A5F663A5F877089BA265BA5A03726293CB7920905270775692A42B04A544506C140A05028140A05028140A05028140A05028312E73A1DB2DF22E17194CC48719B53AFBEEAC250DA123254A2780005079C'
    $JpgBin &= 'B6C7B49BAEA1BF5B343D8E0976E17B5845BAC7202905D6CE4997711ED2180905423702A4A4977865AA0EDBB3AD1B0B47D9D4C3721DB85D2514B972B9BE076D31D03009C704A123821B1E1427000F30DA57BBB877B18C71CF2A084993DB4AFB38C0BA738F4F979D069BABB5DE9BD3ADBAE5E6F0DA5C6BDB8EC8ED1C47A2923823FB653F1ACC44CEE86266237CB93DCFE9171254D55BF47E9A917695EE270B7D6AFF00E13231FF00CCAB62C57CF72A9D451C2378DEA8FA455F3ED2D3A1A6406CF47A146898FF00F54B59A7774C71A98EF6B9E14AE772FA4EAFC4AB7389F4173B60FF00F848A6C5BFCDF036EEFE5F8A954FFA4A5AFED2658273ECA7890DB36E984FC9A2DACD3BBA27854CF795F3A5651B77D51617D0C6B2D26CC4528EEA112E3C9B53ABF5CBA1C68FF7D22B1DCD5CB79DFD3F8B737ED3BB64D11766D913E4BD6353CADD695724A446755D4224A0A9957CD43E155CC4C715B15455C1D15B5A56DA1D4292B42D21485A4E52A0791047023D6B0CA3B5469EB1EA8B4B96AD416C8D7186BE3D9BC9CEE9FBC9238A55F89241F5A0F34EBCD8C6ACD9B5E06B2D98DC26C98F18959651E2951D3D4118C3CDF98C671CD2402AA0DFF63BB426F5B2DEBC69C544B3EB56D01CBADA9C594C2BC20003B4EA52BE403A015A3805871012283BA692D470B51C071F8E87A34A8CE76336148012FC478004B6E0048CE08214094A924292'
    $JpgBin &= '4A48242728140A05028140A05028389EDCB6BF034E58A7390EE0B89023B8A8D22E2C1497A44819062C30A052A701042DE20A1AC11852C1080CED81E84950EDB17586AC84962FD290A761DB86F29BB3B4EF1290544A9721638BAF2C97144EE9381C43AF50465C66C760946F6FAFEEA7A7C4D06ADA9352DB2CCC87EF5738D6F42C65B42D5E3707E140CAD5F2068397EA4DBBD820BFDDAD56E7E6BE4EEA4C8743393D30DA02DC3F309AC4D510BE8D35DAF7C528F46B5DB45FC66C5A2A54442BD873EA82DA48F3DF92E60FC776B1B5D213FE1A29F4AB88F8ABEE5F49090779519E64F90956C47E81B34CD5D0EEAC7FD4F84A85B1F493860A84490F2473FB4B63DFA6E24FE46999E877366785CF84B15FDA96D534D78B53E8F1DD91FB47E55A64451F275A53ADFF00C34DAEA7F09357A1544FB5B3692DBBE98BBE1173B7CFB51C656F3644D8C81E6A5B5E340FE26D22B31313C14DCB35DBF4E30E9B66BA5B2F16F4CFB2CF873E128E13222BA971BCF51949C67D0FE55956C97D8624C7763C965B7D975250EB6EA42D2B49E6140F023D283CFDB5AFA3A4396A72F9B3C5A6DB3D07B436E539BACAD438E5A5FEE959E409DDE58DC02823B661B469373BC46D1BB477A658B575B9658B55F8A43725A59C7D8BDBC30A0AE1C140A1CF0EF0DEDD590F46E93D512645C0E9DD46CB30AFEDB65C4765911EE0D0C02F304F1E191BED9254D9233B'
    $JpgBin &= 'C9285AC36FA05028140A05028140A05028140A0505A79D6DA6D4EBAB4A108054A528E00039927A0A0E05B68DA23317474BD793DB0BB1C0524E9EB739902E5289FB294E8EA8046FB68E894974F8BB3DC0F2DFD1BB6B10F4A6D92E1AE75AC7B85EA4DCA2BCD2DF64214F36EAD6856F80A2918C24A7008C0381C385473BD38A730F72686DA1BBAF62BAFE9CB3BD11848052FDC48E04F428413D0FDEA4559E0CD546CF1486A8B8FD436E0BBA4A993D612A716A6D918E1C790C2523A0C9CFA9E26B3BD18889DEF3C5DF5BED27697759365D9F40540B6A145A913DD5969947985398DE51E3ECA47C52471ABE8B511BEB9F635ABBD356EB71ED6D3A1B607A6ADAB44FD5F7499AA2E1CCB6B5166220FE1692727FB4707EE8A9CDDC6EA630845A899CD73975FB2B36BB1C14C1B45BA15B62A79351184B48FEEA401F3AAA733C5746237433FBFF00E2FD6B18672F9F587E2A60C9F587E2A60CA89129A90C2E3C8436F32E0C2DB71214950F220F034C319733D55B1CD0B765BD2ACF19DD2F7075385BF6821A6DC1F75C60E5A5A73CC6E8CF9D59172AE13BD5CDBA78C6E72F916EDA36C79D5CB89250E5912A2B72542614EDBC8EA64C2C9547CF57639C240C6E926B336E9AFD1DD3D188B95D1E96F8EAEB7B35DA9D9B56AE35BE52116BBCC8415B11CBE1D626A4735467870740EA8E0B49C829E04D513134CE25B14D5154661D041F2AC32E3F'
    $JpgBin &= 'B57D90AA75D93ADB67EF26CDAAE2B9DBEEB6421A96B1CF3D12B3C4127C2AC90AE6554137A3EF33B565ADAD5B688A9B4EB5B5660DD2DEFE5B43E51E2545781E210ADEDF6DCE25B2ACF105C4AC3AA695BF42D45676EE5052F201529B798793BAEC77527756D389F756950208E5C3209041212F40A05028140A050738D7DA89570933AC16F9EB816D8092ABFDD1B70A0B29DDDF319A58F65C28214B58E2DA08C616B4A921E06D57B4D6752ED86CDA8E45B42F4C58E7309B6D990021B44369C49ECC27D90A584F1F881C80C46A94E88CBDDBB38DB4D9B68129A634E592EC02BF68B981B6C207F614BCFE948AB32CCDB988CCB7ABAADE8909F992A5294940C86DA1BA3E0327893EA71F0E344237B866BEDA25F245E069AD196F7DFB8AB988E52B753E64AB8A1A48FBC72797B3519AF7B6EDE966A8DAAA711D7E8C6D35B17977490ABA6D0AFEFBEF3C779C8301D500AF475F5656BF50303C8D67133C52EF28B5FCAA77F5975BD2BA7B4BE956035A76C502DBC3056CB43B450FC4B3E257CC9ACC44428B95D773D29CA73BF7AFEB59CA1B277EF5A64D93BF7AD326C867EE9C0277BC81FE74CB1B2D3B56E81D17A9D2B5DCACAC352947784B85FEAEF857DEDF46378FF167E15198895F45EB9470971CD43B27D65A2AE2E6A0D0579973C8E2AEC54199FBA38E1631D9CA1D485A727901D69BE1662CDEE31B33E1C13DB39DBA4692B16BD72D'
    $JpgBin &= 'B56E9085F646E486CB4C85E71BB21A2498EACE06F64B79246538C54A2A896BDEB15DA9F3B875E4EDA950524292414A8020839041E2083D45654B47DAD6CC74FED12D9B9390225D1A414C5B836805C6FF000A87BE8CFBA7CCE08268357D9DBB7996DAF665B442FC7D436A025D9AEEC2FC6FB68F0A5F65C238B88DEC1C8F125452B491BE0875CD11A8654E72458AFA9699D41012953E1B494B52D924844968124EE2B0414E49428149246EA941B5D028140A05028140A05028140A050739D7B346A3BC2F49B4ADEB544DD5DEC8E5214405370FE0410B707DC2841C874E03867D31B47EB6D6B67D3B0B4ADB1DB930CCA79D98D21D4248594A436A3BC464005D19E99E3CE834ED8EFD17AE6998C5D35ECE661B482142DB0D61D717E8E39C5291E89DECF9A6A331994E2AC461EA63A8B4EE84B5478298F160416DBC86DBDD404F40027AA89F3F251CF0ACD31BF10C553BB3328AD4888FAF61C7917343ACDA7DA4C5DEC29FF2512388491F3F80209B623655D5398C2FC47224088D42811D98B1594EEB4CB28094207900380ACEF957988DD0B9DFCFDEA60C9DFCFDEA60C82791C95C3A8E94C197D13B7BD93C7CBAFF009D0CBE77F3F7A983277F3F7A983277F3F7A983277F3F7A9832E41B46D9930B126EDA3A2B0DB8EAC3F2ECAA5F651A52C7271923FD9E40F7569C0E878156F5B1315462B5534CD33B5426F635B5754A5C7D3FAA65'
    $JpgBin &= 'BCE29C7FBA43B94A4F66F26471FF00539A9F71FE0775CF65D03A2C285515D1344EF5F6EE4570ED79E86A0B1436CB0890E49430D25E74252E3A100296139DD04F32064E33CB27CE8206ECEAB4A5F15ABE3929B63E12DDFDA03806D23751300FBCD0C059EAD7139EC90283A3A541490A49041190475A0FB40A05028141AA6D0AFD2AD9123DAACEB40BDDD0A9B88A5277931D09C76B2569EA96C28607BCB5368E1BD901CAF6BDA72E8EEC46FBA6746C771E9EF44EC9A42DD1DA3FBEE053E54B56379C5A4BA544FB4A51EA683CCDB38FA326BCBC4D43BA90C7D370010545C525E90B1F8508240FED2863C8D62632953561EC2D0D66D3FB31D2C225AC2C3680029F94F6F38F2BF12BA0E670900000E0563833E9710EAD5EB58CFC2B6AFB08293BAECD48E1BDD508F338EBD387CE3B5B5C1B54D98B58AABE3D172C96FB4D822AA35AA32190B3BCEB9CDC755F796AE64FE83A6291111C18AEBAAB9CD4CEEFBF8AA5943077DFC54C983BEFAD3261F7BE70C956079D32C61F0CEE89240F3EBFE54C987C1340E4699670FBDF7D6993077DF5A64C347DA5683B2EB2419808B7DED08296A7B4804A8631B8EA7938823860F4E1CB20C6632BADDD9A236677C74737D9F6BABFECB2F674AEA98CEB9666FC4A8E825C315BE3FEB110F35B3CCA99E69C1527185A4669AB3BA55DFD3C531DE5BDF4FC9E9681322CF84C4E8325A9516436975979A56F'
    $JpgBin &= '21C41190A49EA08A9B5171C61875D65D75869C71851534B520153648292527A12091C3A122822F53DB254D6E35CACEE34C5F2DAB53D6F75C384289002D8708E3D938004AB9E084AC0DE4268367D2B7A8BA82C51EE9110EB21DDE4BAC3A9C391DD4A8A5C6963A2D0B0A49F5079D04BD028140A05028140A0502814105AD6F6AD3FA79F9CCB2244D5A92C418EA5603D21C212DA09E89DE20A8FBA90A3C85069963802D96D6E217D525EDE53B224A861521E5A8A9C748E854A24E3900401C00A0CF06822B58EA1B7E95D3332FB73792DB11D07701F7D78E03FAFC80E24566299AA710C4D514C665C1740B575D7DA817AEF55973EADED09B64073D9731FBC58E440E83AE3EE800ED4D116E36638B53BC9BB3B5570E4EBCE5D14BE6B26ABD959B6B467E7AD6708ED1DFBD6B383277EF5A60C9DFBD6983277EF5A60CAA1700AE0B3FDA1CFF00CEB1836854C5019C8293C88ACE0CA9EFDEB4C19436A1D6768B0CDB643B94B4B4F5CE488F1D24F356399F219C0CF99155D7722898895372FC513113FED1D6533DFBD6ACC2ECB9FED3B4C26E45EBFDA213522E259EC67C151DD6EEB1C60F64BC727060143838A5413E43128C4C6CD5C109CC4ED53C5BB6C136802F90D9D3B739EECC9498E5FB54E7C61D9D19070B43BFFE6593E1707BC30B1904A8EB574CD33896D515C5719875E8ED878290938779A47457A7C6A29ADA82549285A42924'
    $JpgBin &= '614950C823A822823F66EFAAD6F4BD1721448B6A12F5AD6A392E41592108C9E65A505347AEE869478AE8377A0502814169F71B61A5BCF2D2DB68495296A3809038924F4141CB6CD21CBCCD95AB24A54972E61221A163058849C96538E857BC5D575CB8127F66282581A0296DB6DADD79C4B6D3692B716AE4948E67FEB9F2A0E13A8EEF3F695AD5EB4407DE8BA7E02B12DE49E38CFEC92796FAB1C4FA750003555BE710E969E88B54F79546FE51FABA55B9C8D6E80CC182D263C6613BADB68E491FF5D799359C21566A9CCAE99BEB59630F9DF78E37A86CBEA66151C0249A185466253EF6F2BE3C07F5A31852671272559A1B277DFC546764EFBF8A86C9DF7F150C1DF7F150D93BEFE2A1B2D7B5DD86DFAB6D1DCE5A8B32593DA43968FDA4773A29279E380C8EBE840231319596EB9B739693B16D6D3741EA67746EA7298F6A76404AB8E1B82FACF85E47DD8EE920287B285A82BC2145352A6ACEE951A9B11479F47A33F0F07A69A08ED771E2A40E44FDD3EB526A3EBC8534E16D6388F2E46820623DFE8E6B86E40F0DAF50B896640F7599E9461A73D03A84F664FDE6DA038ACD0742A05028140A05028140A0502839C6AA95F5B6BAEC01CC4B035803A198F2389F8B6C280F5128F950540D056DA4AD694271951C0A0F376D7AF0ADA56D3D1A4A23CBFF0046EC642E7290480EAF3ECFC49F98E3F7056DD9A7629DB9E32D2BF5ED'
    $JpgBin &= 'D5B11C238B72664B6C328619421A69B4842108184A52060003A014C31955DFB80E34C193BF7AD3064EFDEB4C193BF7AD3064EFDEB4C193BF7AD3064EFDEB4C19548B82907215F11D0D30656AE178870E0BD364BC98ED3282B70A8F0C0F23FE150AEA8A23328D75C531964ECC3654DEB7D3777D57AFA1B8D4BD450CC6B5C658F1DAE193BCDB89CF2794A09733D0048E1950AD58899DF57195F62C6CD3335EF9AB8FD3D5082D3572B9B2DCAB1DFF0009BE599F30AE00725A920143A9FC2E20A560F92AAFB356636678C35E9CD1336E797CB97D3D7097EFDEB57613CB44BF469166D52C5CECF2130BBFCC43D1DE3C130AE83834E9E81B787D8BA0F03BC952B380295D3B74F8C33455B15784BD2DA175247D53A5A05FE236A8E5F410F4757B719F412971A5678E52B0471E6003D6B51BAD8E490E25125231BFC163C9439FE7CE835AD5EE9B5981AADBC85595D2E4AC7BD09CC26483E89484BD8EA5848A0E8A082320E41A0FB40A050691B569224C085A5D273F5CB8A4CB03FF00526C053E0FA2F2864F976F9E941825454A2A3C4939341F41A0E67B7BD4D2A14089A4ECCACDD6E8B09383EC0E793E4120851F520FBB51AA710D9D2D98B95E6AE11C51FA56DF134ED8D8B5C3E296C6F38E11C5D59F6967D4FE8303A54237372BAA6BAB3295133D6A48618B75BDB16D84A9520AC804210DB692A5BAB2709421238A944F00055755714C'
    $JpgBin &= '65758D3D57AAD989C446F999E111CE67EF333BA333310D8ED1B29BC5CAC8AD4177B8BB6ED5AE90E42610E15C782D7FEAEE241C39BFFBC574206EFB3E28F73331B533E77CBC3D5D7AFBB139ED6A68ABBAB74E6CF389E357F54F4ABF2E3D1E1BFCEDA8062EB23BCCAB64D8AE5BAE50D7D9CC88E1CA90AE873EF21438A543811F3A9535E774F1862FE9A28A62E513B5455C27E713D2A8E71ED8CC4C4AF77CF5AB1AF83BE7AD0C1DF3D6860EF9EB430C369DBCEA1BE274C696083715242E5CB5A7799B7327F78BF359E3BA8E6A3E401354CD5354EC53ED9E9FBFDFAF728B76F4F6E351A88CC4FA34FE6F19E94C739E333BA39CD337AC343BFB3BB6B775B3C89D71B0A503EB5121C2EBD1DCF7A583D50A3C5C48E09F680C6F6134773BE9E1CFEBF5F7F1E2B3ACFED39EEF5131173F0D5BA23FC13CA23F2CF0A7D19F371B31E89C95A12B42D2A4A8652A07208F315644E6330D5AEDD545534D51898E2FBDF3D6A48E1A5ED52C69BD5AC5CA2B0876E1090AF011C243241DF68E389C8271D739C609CD467AC2DB78989A2AE12E89F474D687526923689B256FDC6D084252EB872B9311590CB87CD49DD536BC7BC8CE7C55644E632E5DCB736EB9A6793AD0576F1083FB464647AA3FCAB2822750DB1BBD5925DADC794C17D186DF4FB4C3808536EA7F121612B1EA914135A22F2E5FB4C42B8C9692C4C214CCC652721992DA8B6F207984B8'
    $JpgBin &= '95807A819A09DA05028140A05028140A0B329F66346764BEE25B65A415B8B5724A40C927E541CA74C179DB3B73E520A255C94AB8484ABDA42DE3DA041F5425496FE0D8A09406835ADAC6A7468FD9BDE2FA48ED832588E93EF38BE1F97100FA2B353B746DD51085CAF6299A9C1367705766D3C83254A5CF9AB32A638AF694E2B8E0FC07EB9F3ADDAE733B9CFA2311BDB1F7D3E7504DF7BE9C73A60CBE77D3E740EF87CE81DF4F9D03BE1F3A077C3E740EF87CE81DF4F9D3032766FA5D7B53D705A9692AD21A7DF4AA7E47827CC18288DEA847052FFB29F7B234ABAFBCAB3CA387D7E869E8EF6AEF678470FAFE91EF7AA12D94FB18C7DD3CBE5E54741C47E921A6D56D99136916F69494329440BEA00F6A3957D93E7CCB6B5609FB8B3D1158DAD898A9A9A9B7988B91C63E5CFEBEC73CEFA7CEB7A37EF8531313BE18B77447BADAE4DBA60DE624365B58EA33D47A83C47A8ACC6E277EE6D7F473D47211A824D9EE0EE5CBBA1C75CE3C3EB28A1299047ABCC965F27CF7AB52E462A986D58AF6A9C4F1877E8CADE438C9F78653FC438FF51F3A82F5875B69E656CBEDA5D65C49438850C85A48C107D08E1415ECBA43CBD20C5BE4BAA7655A5C72DAF2D672A5F62A28438AF55B61B73FB741B55028141CCAE523EB1D73799C4E5B841BB5C7F21BA90EBCA1FC4A75083EB1C505D0682A4B8DB495BEE8CB6CA0B8B1E6074F99C0F9D079'
    $JpgBin &= 'E2DB3D7A8B5A5DF57CA5F680BAA8B089E5B809DF58FE2567F51554CE65D6B747776A29E73BE5B0F7CF5A3385B9173622B0E4892FA1965B4EF2D6B5600158AAA8A6332B2D59AAED514511BFEF33EA8E333CA1D37647B3F7CCC6358EA78EB4CD4826D705D4FF00B1A08FDAA927F7CA1E7EC0E1C0934B744E76EBE3F2FBE6D6D6EB299A3F87B1E8739FCD3D7D51F863DB3BE777624A4247015739AD136A5A09AD5711B9D01C6E0EA1869221CB29F0B89E659740E2A6D47E693E21D41AAE51B7BE374C7DFB9BBA2D6CE9A669AA36A8ABD28EBE31D2A8E53EC9CC4CC4F0B4CC92D4A9102E115D837188BECA5C477DA6978CF3E4524710A1C140822A14579DD3BA61D2BFA78A222E5B9DAA2AE13F389E931CE3DB1989899B9DF3D6A6D7C1DF3D6861F2D8D5E7535F51A6F4CA12A9EA485C994E2779980D1FDE2FCC9E3BA8E6A3E401355CCCD53B34FB67A7EFFEFEBDAA68B5A7B71A8BF1989F469FCDEBE94C739E333E6C6FCCD3E87D05A4AD3A2EC08B55AD0B254A2EC992E9CBD29D3ED38E2BA93F901803000AD8A288A2310E1EA3517353726E5C9CCCFDC4447288E1111BA21B229295A4A5490A4918208C822B2A9E74DA669177404D370B736A3A5253B8DD1C7EAC7547820F932A27C27DC2777914D6AD51DCCE7F0FCBF6F93D169AEFF695316AAFE74709FCF11CA7FAA397E68DDC623301DF3D7F5AB5A9B277CF5A1869FA62E89D'
    $JpgBin &= '05B5889724A8356B79CFB7E89115F5250F27D7B373B3740E8127CEB344EFC29D651B5445CE71BA7F47AD195962402A1EC92143D39115639C3A9ECDD52339093807CE8303462FB86B3BE5A49C3339B6AEB1C74DF23B17D23D016DA59F578F9D06EF40A05028140A05028141AA6D597BDA1A6C1271F59AD9B6A88E61321D432B23E095A8FCA8219A6CBEDC992AF0A5B1BC71F7947007F33F2A0B20D079E3E9B37D537174F6976D7C141535F4E7AE308F910AFF0082B73494EF9A9A5ADAF1114B47D05A80DCB4FB4975799318069DC9E2703C2AF98FD41ABAAA712D6A2ACC360EF9EB51C2593BE7AD3064EF66865F44A3E7432FBDE8F9D32C6D1DE4F9D632C6D3EF793E74C9B4F9DE4F9D32CED2D34CDE750DF20692D378379BAA8A1B708CA62323F69217F85039799C01C7856B5FB99F323DBF7E28C5337AAEEE3873F574F6FC9EC2D01A4ED3A2F495BF4D591A5221C26F742D7C56EACF15B8B3D54A512A27CCF0E18154BAD11111886C01346566E10225C6DF26DF3A3A244494D2D97DA58CA5C42814A927D08245078D753D9A668BD513B494E716E18242A1BCBE72222B3D939EA40050AFC483E756E9ABE36E7970F53953477554D1CB97DF821EE7786ADF6F7E6BE7ECD9415119E27C80F52703E75B9119666710D63635AB24C3D4132E725C2A7614D62F631CD49439D9486C790532FAF3E8D8F2AD7D653B334CF5DDFAC7EAC6'
    $JpgBin &= '9EE6CDE889FC5BBDBC63E197BB52AEC9ECA4856E2B811C8E0D6B3AAFAE00971491C8138F85062E8C5F75D6DA8600186E5B112E43D5C2171D78F8263B27FB541BAD028295A928415A880948C927A0A0E4FA21B72E168B7BC7C2E5CB7A7AF3EE190B548503FC3DA11F04D04828A778EE67773C33CF141AA6D96F2AB16CBAED31B5943CF80C3441E39381FA29483F2AC55388CADB14779722979BB66379EC83B687578049758CF9FBC9FF001FCEA889776F519DEDEBBD7AD4B2A30AA34DEEF718370436C3AF4192892C25F6FB46FB44F2DE4F51FA8E04104021BB3992ADAD8AA889C6774FCFE70F4FECF3595B759DA4CA87F612D8C265C352B2B6147971F7907077558E383C88205B13971EBA2689C4B6BACA05073DDAD6CF1AD6111370B7B8D43D4311B298B2549F03C8E7D83D8E2504E7079A09C8CF882A9B96F6B7C6E98FBF737B43AE9D34CD15C6D515718FD63A551CA7D939899879D5C7E4C797220CF8CEC29D15CECA4C677016D2FC8F4208C104702082320D428AF3BA774C3A97AC451115D13B5455C27AFAFA4C738E5E31313393608179D537E6F4F69C6D2B98B485C890E0CB509A3C3B473CCFDD4F351F4048C4CD554ECD3ED9E9FBFDFAE514DBD35B8D45F8CC4FA34FE69FD298E73CF846FCCD3E9BD01A3ED5A274FA2D56B4A9654AED24C9778BB29D3ED38B57527CB9018030056CDBA2288C4381AAD4DCD4DC9BB767'
    $JpgBin &= '333F71111CA2384447086D1595450737DB16BAB5D86D4FD8D2C46B8DC26B25B5C579216D36DA860A9D1D4119C27DEF419351AA71B9B1A7B335CE78447DEE79DA2B8DC68CD4768ABB3690109DE564E00C71279D554C45318875EEDCAEF57372B9CCCF15DEF5EB59CABC398EA3BD3773D541C7179828CC624756940A5C23E214AC7CAA3B5BF2BEAB3B56A68EAF626CA2F0F5F367162B84A5132FBA88F2893925E65459709F52A6C9F9D6C3CEB6C755BC10AEA5201F970FE405044CC5989AC74C5C53C37E4BD6E74F936F32A73FFA91D91F3A0E8140A05028140A05028141A56D4179734E47CF072E6B5AC79844490A1F92F72831DDC33A7981EF487D4B27D123771F993411E324E073341E3CFA5D5C4CDDB6DCA36F6516F61A8A8F418DF1FF003D7474B18B7972F57566E63A39BE99BB3967B9A5F049657E07923AA7CFE239FF00FED5F54661AF4CE25D39A98975A4B8DAC290A190A0781079552B3697048F535199626A56247AD6328CD6A848F5A8E51DB54241F334CB1B67783E758CB1B676EAF3A64DB599B7266143765C852834D27270324F9003A927000F3350B97362324D733BA37CCF07A7BE8D7B3791A4AC2F6A3D42C246A8BD212B9083C4C28E38B71479639AFCD5E7BA0D6AC4638F17634F662CD188E3CFD6EC013595EAC2683E9C00492001CC9A0F217D2275CD97586B0882CEC34E47B421C61BB8249DE925646F01'
    $JpgBin &= '8E6D8291BB9E672470209D8B16B33B72E7DFBB15CE2393CF9AF2F866BE2DCC2F2C32ACB841F697E5F01FCFE15BD4538DED5AEACEE5BD98AB3AD21C53ECCE43D0543FDF34B687EAB07E55ADDA1FC899E9313F18CFC32AAAAB6366AE931EECC67E197BE76757055D367DA72E0B254B7ED5194E13D57D92428FF781AD277DB0BA72A07CD29FE42830209ECB6916770704BF6C9CCABD48722A91F900E7E66837CA0506BDB4A90E44D9E6A392CAB75E6ED724B67F1F64ADDFD7141076865B86C5C14D001B8AC165AC7BB93BA9C7CA823C1A0E45F4B39A59D1B63B7A4E3BCC92EA87984EF83FF83F2A85CE0DFECEA73773D21E6F8CF3B1A436FB2B2871B50524F911543B5319749B4DDD13E122423C248C293F754398A9E5AD5518964F7A3E759630CFD3DA92E7A7EF2C5E2D127B096CE4024652B49C6F21633E241C0C8F4041040211330AAED9A6E4625EA9D99EB9B5EB8B3F7A884479AC00999094ACAD951E441F7907070AC71E20E08205B139722E5BAADD5B35370ACA050736DAF6CD236B58CDCFB73EDDB6FF001D3B8D4C2DEF21C6F3C5B75231BC064949E693CB8150355CB5B7BE2713D5BDA1ED1AB4B9A6AA62AA278D339C66384EEDF131D638C66384B60D9D68DB4689B022D36B42DC5295DA4A94E805D92E91C56B3FC8720300559451144621AFA9D4DCD55C9BB727333EE88E5111CA2394726D3595250730DB26D3E36918'
    $JpgBin &= 'EAB4DAD4DC8BE388CE0F8911524705AFCD5D427E6786331AAAC3674FA79BB399E0F354AB9489529D952A438FC879656EBAE2B2A5A8F324D56EAC53111885BEF7EB467083D5D7B31A1188C2F0FBE3048F711D4FC4F2FCEA3329DBA3339688470C545B0F5BFD17E7AA4E85B8475AB796CDC7B6F807D865CFF9FB4AD98DF0F357E9D9B95478BADE72CA7D147F503FA5655217582B72CECC91C0C6B8C07F3E4944B64ABFE10A1F3A0E8F40A05028140A05028141CCB6E176365559EE2A6FB54C70F38A4E7982A65B38F5C38AC505E766C79D61B3C988E0763BB18BA850EA14A3FD2831D2F2185A1D708090B4F3F52001F9D07883E90EB53DB6BD4EA573EF491F93481FE15D3B1BADC391AA9FF992D150DD59353526A6C7A66EAA883BA3EAFB03C50A3EE1FE954D52C45CC36B0F655C0E73CB155CD4CCD69BD39A5B586AA8F723A42CA2E4EDB5A539216EAB71A0A037BB049F7DE50E491CB232464634EBBD55CDD44E23AA562C5CD56FA6714F5EBEAF042C29CDCC8C890D6FA50A25250B18536B1C14850E8A0781AB6DDDDA8DFC54D75554553457BA617C3BEB53CA3B6FA1EF5AC6D31B6CBB7BA0092E6E85AD11DC5A0286464272387C6B1356213A2A8CEF74DFA2CE921AEAFAE6ADBDC468DA6C7292AB6A43784C9969CE5DF54364787F1F1F748AD7CED4ED4BADA4D3E3FE6D51BF97ABF77AD826B2E83E8141F7141E65FA4AED7049'
    $JpgBin &= '5C9D11A6657D82496AE929B57ED0F22C24FDDE8B3D7D9E5BD99DAA36E733C3E6E6EAB55133B14FB5E63BEDD94D8EE71978797E152C7B80FF008D6FD2D19B9C91B6EEE51AFBF56478BDA2D3DA25D7DDE2729493E11D388E752DBCAE888851B384156D0B4FA42B708B9C739C79389354768FF74BBFE19F94B5355FDDEBF54FC9ED7D83DE512F44DA6D91D9DC8F1A1BC12A59CAD5BB214919E8381E55A73C5E9A78BA1C879B658ED9E710DB686CA96B5A804A40272493C85618695A5757C5D4DB4AB7B36D4E624290A690F1C82EEFC7905471D1396938EBD7D00767A0506B3B4E1BDA1AE4D9E4E06DB3F0538949FD0D0699A1B51C7D43A3A74B6B0891DBB4DC86BEE2B89E1E8798FF002A0C90683857D2DA4A5F46952D9CB65A92411C8E0B633FCEABB9C1D3ECC8F3AA7118C62C782ECE94D2DFDC5A5086927009209E27CB855510E9D754C7049B37779A876D981B4210E87038DB6309C059031EA056677234C6D426DA9A879A4BADAF79247034CB1B32B81F27AD6329D36A6527A6B50DD34E5EA3DE2CD2CC698C1F0AB194AD279A163DE41C0C8F40460804622E6259B9A3A6F53B32F5CECAF6816BD7965EF11B11AE2C00264252B2A689F7927DE41E8AF91C10456C53545519879FD469EBB15ECD70DD6A4A0A0D335C5D67C0BAB4CC492B690A602880073DE571FD28373A0E4DB6CDAB31A49B72C96471B7EFCE27C6AC05221A48'
    $JpgBin &= 'E0A50E456471093E84F0C05575DC8A777374345A0AF533B53E8BCBD2E6BF2A4BB264BEE3CFBAB2B71C71454A5A89C9249E2493D6B5F69DEFE1E298C446E592F63AD4A2A5555961DCAE8886C951F12CFB09F33FD2A5957DDCB5190F3921F5BCF28A96B3926A2B2230B7465E9BFA24B84D9EFC927A42501FD97D3FC922B628F45E7B59FCFABEF93B9A4FD92BF887F23526B39D6D235A414995A660A91224AA34854958394B250CAD6123CD5948CF97C790775A05028140A05028140A0E3DF4A34A93A4A2BE07571ACFF75CFE4D1A0E58EEBBB969BD33A3253094C884FDB1D6DD8EB380A53729D49293EEAB18E3F0C83C2831750ED5CDD97022C384A84C26534F4852DC0A52C21614123006064039EB81CBA871FF00A4AC23136E7A9DA23817DB58F5CB2D9ADFB357990E26B2717661CFD0DFA54A6A68CD4CA8ECA9C712DA1254A51C04819249AAAAAE22332AEAAF0EDDB06D91DEF5C144A90F3D074F34BDD7A72478DE23829A8C4F03C4614EF14A4E427241AD1AEB9BBFE1F9B7B49A2AAF79F73753D3AFECF64E9AB0DA74E5963596C7019816F8A8DD65868600EA493CC92724A8E4924924935277A2222310F36FD29F65CAB1CF97B4CD37114AB7C85056A286CA73B87A4D427D3F7807F17DE223544C4ED53C5A3AFD277D4ED51E947C7C1C6243906DAD215316A7DD75016869A3C374F1049F5E156457154661C1A633C58A8BDC'
    $JpgBin &= '152B0E5B54139E6974E69B496CD2DAF43E9A91ACAE62D5675BED352E0C8766BC471891523754BCF2DE51F0247992790C8AEA9DA9C726DE8B4BDEDCDA9F463EF0F4FE809103485905A6D96F088ED36DB51DA41C25094823E24F1F89E7527A06C9135A24BA1136116D279A907247C8D06CF226368B5BB399297509654EA707828019A0F3EEDC76D6EB3649FA774E2BBB5C7286E64A6DCC98E858394A4F459039FBA0F0E3822311B738E5F7B9CCD76AF6236289DFCDE5D54D6136E9CF868BA6384630ADD1E2563856DC4E383936EA8AB723E2B36F7AD0F5D7B9AC164ABC05E27788DDE39FED54E2B5914C6504D5CBB1BFAEEBDDF7B796B5767BDF78118CFCEA512D8894BE8AB9C26759D9DF6AD385A26B4B07BC1E18583E554768573FC25C8EB4CC7BE30A7574C7715C75898F7EE762D0BB4A95A05C8C84DBDBB830F5B5054CA9E2D9429C5177782B07A286463CAA897A394C6A8DA2DE75D5A9B6CB69831FB44A7BAB2E12957151CA8F356303D3AE2824F6137F8B1355EEC064CA75A5F685E5AB08CA5A750700731F6A38FAD07A0E06B55768113A1A4249E2B689E1F23CFF003A0DC5975B79943CD2C2DB580A4A87220D0738DAAEAF611A4EEADC28C242596BB52E2C9093B842B801C48F0F3C8A0E1DA1350CC87B3AD4D708CE316F76DF788BDB1009416F0EA48524939C92063E18E34162E7B7B71C82B66D5A7D0DCA29C079D74A'
    $JpgBin &= '923F1048C63E193F1341AEED16EAD6A2D1BA19326DE52AECE4301C65C3E02140710AFF00764F3E955DCE4E8F67D589ABD8E63AA5E622A3EAB8EC8DC3D9BA5DDE3951C1E9F3A843A154CCCEF62C5BC2116E8F0DD80DBC180ADD5159078A89E9F1AC4A54679362518D6BDE9CF052232C23723A4F1714A4051C67901E750996E534F9B1D5537A9A2B9C5AB5B491E4A74922A33309453542566AD03BBB8DA0361D610E1483C0152726AAAAAC3A162D4D54E65B26CBC6A04EA98D70D3CFAE3CB8EA1F6A3D8083ED073A141038A7AE06388C8959AAA9AFCD6AF6BDBD3DBD366FF19F47AE7E91CE7D9C5EA456AEBABC77A3436B7473C214AF8FC2BA0F1095D3DAA5B9F2131263418795C10A07C2A3E5E86821F691FF00A698FF00DD87FCCAA09CD7CF5DA3E90B83B6394C46B825AFB271E4E46723213D3788C8493900E3208CD62738DC9D99A22B8EF2331CF0F14479F2A6DDA6393E0762965E577B5482A2EEFE4E52ACF12B279FE75A154E277BDCD8A62E514F73E8F2C30A5C8438FA96DA03682782474155EDB6E74F311BD1F3272590427C4BF2E83E352DB553A6CA0A4A9C79C2E38A2A51A9C54A6BB1863A938A9C4B52BB5853525131875ED9A6A599A374CB777889438A7A732DA9A59212EA10C2D4A49C72FDBA4E7A1C55F47A2E06BBF9F57B3E50D9B54ED96F577B3BCCDB98459D0A7108529A74ADD50215901781BBD390CFAD4D'
    $JpgBin &= 'A8D474238A9BA9998C0E4BCD3CD7CDC69481FAA8507BA28140A05028140A0502839BFD226DEB9DB3A754DA7794C3AADD4F9A9D65D611FF0013C9A0F285CE619FB17B24B0ACFD537A950943C92FB6DBC8FD50EFEB41A599B9046F506DBF49A6BBFEA5D3DAB1B00B77EB14692A50E45E03C63E5940AD9B3579B8717B4A366B89EAE54DB7529A9C89A9B1E84936383AA20BFA9A1489B65ED409AC477371C5B7D403CF1E601054011919CD6B5DA62B8DE95AB9445C8AAE46621FA29A525596E1A7604AD3AE4572D0B6122198C9096836060252918DDC631BB818C630315089CBD65BB94DCA62AA67309709ACA6A1E65A7D95B2F210E34E24A5685A414A92460820F30683C29B66D0E9D9DED45C7DF656BD2F3E5ACC25286F088E281296147EE722827A023A126BABCD9DA8723B434B339BB47B7EA844C87A428351550EE4EBCB4B4CC44A405BEE28E10DA41EA4F0F4E3589AA78438B66DDEBB5C514F37B0365BA05BD07B35931E4371FEB999114F5CDC64787B4DC386907FEED19207CCF0DE356446230F5B6AD536A88A29E498D9B36DACCE52D095293D98048C91ED7F4ACAC4A6BA871DCB0BB20B690EB25250A03078A8023E1C68390ED2F69C9D2DB3D9B64B7381DBD3CCBE94107222B7B99DE3F88951C0F99E1806AAA6667669F6FDF573B5DAD8B3E653E94FC1E4484F3F22D37171E714B52DF694A2A392A277C924F535753888'
    $JpgBin &= 'C43CFDEAFCD7C6DBFF00CDEBBFF0B5FF00D41532C55C54D9E43F12C6D763BBF6929C4A82921408DD479D4E257575CC630B305B47FA76F028494879FF00091C38257D2A712D88A9B26CBA4CC9BAC1A2E259536C34EBAA01848E252509E9F7969AD3ED2AF16E8A238D55531EE9DA9F8532D7B95D55D76AD7E6AA9F84ED4FC29966C89C18D637A420A15DC63775412011F63D9B5919FE0FD6A4F56BAEDF5E931A727B54766DC00A1BA809C2F71293C8799550760FA15A6DCCBB70BACD79869E6D0E250A71401DC70B6011F365C141DFF5B4AB54EB56F332A33B21B5828DD502AC751F0EBF2A0B966756DECF9D585714B4E849F2C93FD682174F5A5374D357E61091DE244472334B238A0ADB50E1F98A0F323D2A5DCE36D2AD7DAB84CA862E8D344924B6DBA990303D1B513F0141CF2C37D88C5AC45331501E0B2A5381B2A0EF9711C46283A94E92ABDFD1CCCB8CFC59F32C7745254E200538DB0E0E7E63C4E9FEED577383A3D9B89BB34CF38F9627E5971FB94891234E283CBDF0890DA13C00C0DD5F0FD2AACBAF55BDECD8926445D396C0C2C237C3BBDE1073F687CEAAAEA6F69AC455C56F54B8EC8B75ADC795BCB521C24F2F7B1FC80A86D6E5F5598A6BC42424BAA88B65A61A61294B0DE3EC924FB23AE2AAAEB98974F4DA4A6BA33309ED2961BCEAEBB458115C86879E467B479610865A49DD2B563924790E24E00AC5145776'
    $JpgBin &= '710C6B355A6ECDB7B5737CF28EB3FA4759F76F7A75AD1969D0DA5ED968B5294F974ADD9529606FC97309F19C721838091C00E1E64F52DDBA6DD3B34BE75ACD65DD65E9BD7677CFBA23A4748874CD3AD36CD92125B42500B0851C0E64A4126A6D552E596DCE5C04F5C605E18C60E0641E0AC79D06A7B48FFD34C7FEEC3FE65507CB94C7B53DF1A811DC0D454A8EE67AE01CAB1E78E43FCE835EDB5EC8E3EA6B226669C4223DEA1A3C2D9504A26A47BAB3C82FEEACFC0F0C14D17ECF791BB8BADD91DAB5682E79D19A278C7EB1E3F3E1D263C8F714CB8F25E892197633ECAD4DBAD389295A140E0A540F1041E18AE54CCD33897D32D536AFDB8BB6E734CF09FBFB847A91598A90AECAD2D156454D3B9656968AB62A68DCB2B0B47E756C54D0B96666710DD7543DF57695D3B6C27C4B4C89C7E0B52584FF00FB527FB55B747A30F23ABAA2ABF5CC70CCE3D5C900A9E8FABDA405F8FB55950F4C2377FF001549AEE81F4778E6EBB4588D019C3AC14FC5321A748F9B6D3BF9507B928140A05028140A050282175C4176E3A4AE5163B61C93D81763A4F5791E36FF00E34A683C25686DB4B7B41D08D9DEFF0057372B695735986B2E023F8A2ADE3F9507363348EB41D616A1ACBE8DAC3C8FB4B868CB929B70735774907782BFBE48F40D9A9D1389737B4EDED59DA8E4E5ADA2A732F33554C843783C6AA9A954D4EAFB06DAA5C767774E'
    $JpgBin &= 'ED23B595A7E52C195141C968F2ED5BCF2570191C943873008A6A9989DAA5B9A3D7D5A6ABAD33C63E9E3F7EAF6CD8AEB6FBDDAA3DD6D729A970E4A02D975B390A1FE07A107883C0D4E8AE2B8CC3D6DBBB45DA22BA2731292A92C6BBAEF4769FD6B609564D450112E2496FB35F1C2C75041E841C107A100D0707D9EFD1FDCD237BBA6A5BDCB4CA5DA9C53365CA810E3440CC850F75C292118E852AE7906A34D114F06B58D2DBB1354D3CDDAEC12DE97A32E297D6565969D425479EEEE640A936546CCBD9B87C5BFF00C541ADFD22B5F43D1DA1A632CA9B7AF1210931A31E3BA3B448ED143EE83CBCCF0E87145CBB89D9A78FCBC7E9D7DEE7EBB5B4E9E3663D29FBCFDF178F6DF2A55C2C5729B35F5BF264192A71C59C9528B69A518A6310F3355C9AAACCCEF4158D853B67B821B4EF292E34B2073C78867F5A9E51BB39A573B3234E5DB2923835D3FF00682A71533A7AB8B121207D49149E425AFF00922AC895B72AE0A5BDD8FAE9D53CA080A7DD193C0788280FE62A712DA89746D8BDA2459E4BB7C9B11612D3BDA805390B0CF8928F5ED1E532D8F5AE6DEABBED7534F2B74E7FCD56E8F7444FFAA11ECEB737B5FB53C2DD3FF755BA3DD4C4FF00AA1A4DE1D4B3AE2ED680EA54EC78E2DFBD9FDA3ED0425C39FC4B42CFCEB71EA98510CA621DC92FB0EB64C45E37924038209E3F0141EB1FA2669282EE8371E9C1C4C83D9A53BA'
    $JpgBin &= 'ADD3B982B20FC1C71D4FCA83B1BFA5AC2C6E76EF3A8DF56EA77DE0327C870A0CABA4162DFA4A5C48FBDD9A5A511BC72789CD0476CD3FD8A67FBC4FF2A0F306B38AEE8BFA46439AE3645B0BDDDE6F1C2531D44B25233CC88CB6558F32283906A7B6AED1A8AE166BAD80F7A8729C8CE391F7901450A292A007020E3341B66C61E6D8D5175D1A87D6137A8016CA1CC6F25D464842BFB2A5ABFB22A35C669985FA6BB16AED35CF089DFEAE7F06B7A8612A341B9462D942A34E0168238A31BE9C7E7C2B4A2ACBD8576669C44ABB7475CFB0434C51DAAE315A5D40F686544838F2E355D7332DFD24534EE96476BBACB7125C061C2C6529ED127233C4D5335CC3A74E8E9AE769B0697D23A875ADFA342B4C36FB57D2095A8E1A61B1C0B8B3D123F32780E358A2DD77AAC41ACD7E9BB2ECED5CDF3CA39CCFE91D67F57A4D9D1969D0D6C8366B6ABB67431BD2A52C00E3EE64F88E390E784F203E64F5EDDBA6DD3B34BE63ADD6DED6DE9BD7A77CFBA23A478436CD7685A6DD68CA48DD6D4957A1C2387E86A6D46D5A7DC6DDB242521614030849C1E440008FCC50721DB46D958B1CE3A5F4BDC237D749527B790B4768DB073FB31D0ACF239E033E7CB4355AA9A3CDB7C5EC3C9FF2729D4E2FEB227627847099F1F08E9D7D5C698BADE2EB0EEC5D4B71AECCC44F7B8A956403BCA0548F3493F31C8F426FD3EA22F53E2E4F6CF62DCECCBBBB'
    $JpgBin &= '7D13C27F49F1F9F26E9A874FAED11D8B85B5C709631DAABA83F7FE1E95B0E2B65D35776EEF042F82643780EA0743E63D0D0730DBFEC899D6319CD4360690CEA2651E34704A67200E0951E41C03825479F04AB860A75B51A78BB198E2EEF61F6DD7D9B7366ADF6E78C74F18F1F9FBA63C91263BAC3EE30FB4E34F34B2871B71252A4281C14A81E20820820F115C79CD3389E2FA9D1DDDFB7176D4E699DF130C75A2A71535EE59595A2ADA6A685DB4BD6782F4FBB46891DA53AEBAE252840E6A39E03E6703E75751E74C53D5CBD54FF0F6ABBDF9633EDE11FF0074C27B6D33A2C78D698915C4389714F38D2D3C9715ADC88CAFE0B5C690EFFF001B3D6BA6F9D39AF7DF5A0F4D7D08ACCA9773937B7124B6DAD6B49C7B2A423B341F8283EF8F8B741EB7A05028140A05028140A050783FE9270E4ECC76E36CD570E305C70F83D91E097908C7D99F242985A59F5ECDCF2A0E31AFE0B5A7B56CDB645794F40CA645B9F3FBE88EA438C2FE25B5A09F2391D28370FA376B18365D7E6C77E58FA83534755A6E014AC253DA706D64F4C288055D12B51A23553155334CF097DD65A6A6693D5971D3D7049EDA1BC5BDE231BE8E6858F42920FCE9353C56A6DCD9B9344F24725BF3E6381AAE65A7554C869BCA0F0AAE6A5532EA1B0BDA9DC767D75EEB28BB2B4FC95E64C6CE4B4A3FBD6FC95E639287AE08A266AA276E9F6C75FDFF00DA794C'
    $JpgBin &= '6EE87B42E692E6637D33C63F58F1F9F09E531ECFB35D2DF79B63173B6CA6E5449080B69D6CE4281FF1F4E62B72DDCA6E53B54F07B6B37A8BD445CB739896B332D1A9989AFC98D2B7BB45957D9B98E7E86A6B565567D51720199AFA92D678F68E70FC873A0D923D9D30F4EC8B6C53BCE3AD2C152B86F2D49C67D3A50687A975231B2CD333AE575EC5D99202530A2A1CCA9E58CF3F248C8C9FF2AD6D45FD88C53BEA9E1F5F5439FDA1DA1468EDE677D53C23EF94737923515E2E7ABA6DDEE176989727CDDC3BCE2B09002C1091E4001802A8B51B3C67333C67ABC653A8AAE5CAABB9399960C14AAD16C650A75875C1254B2942B7814948183F91ABA659B97623130C23695A24197649E86F20FD9AD7B8B4FE1C9E0454A257D17E9951260DEE5B0A6A65C63B6C9E2A4A9E183F24E73538A9645CA639B1E5331E2DB9A84C49EF0A4BAA714B08DD1C40181F954E2A5772EC55C152EDADEA2951DA65D0CDCDCDD6B0B04A1D3C81C8E47CFA70AC5EBF458B755DB938888CCAD9D5DBB36E6BB93888E2EA2CBAD6CF748C99B2A6C7908B6371E6B484AC90E3C953821344103DB90152149FB91B3C88AD7D15BAE9B7B773D2AA733E19E11EC8C47B1E93B2F4D558D3C4DC8C55579D3E133CBD9188F63CF939F857890B9C99E98B31E515BE87F3BAA5939528286799E383D6B6DD26D3B398AE5CF51596C8243571ED262DC92DB2B2ADE8E11B'
    $JpgBin &= 'CE27881C4A52A481D54523AD07BCED7A127D92DF19AB54B405B6DEF2F0B285768AE2BC11CC15127A73A0CB634ADDA63E872E933091C0EF385C5E3C86787EBF2A0DA67400E591DB745DD482CF66DEFA8E070E193C4D061691B44AB43321B92B657DA2814F66A2790EB9028380FD39749F7FD30CDED97931C30B0F3AA2D92158C214091D4A54D9E47C2C93D283CCBAC8DE275A6CDAA58BFB2A6A6B5DCA62D13C84A65C74A52ACE71C54D165CF52A5795042694BDA3476A483A99A98D5C2E502426432D36496CA81CF8D5D41E2081E741DBB6C312DAABDC6D63684191A6B57C54CD6B1CD2B382E24F92C2B891D1448E95CDBD1DDDC9E93BFEBF7E2F7DD935C6BB474CFE2A314CFF00E33ED88C7AE999E6E782C8CF681712E8CEE6723B50A4287A7006AA9AE1D3A34773A24EE2A6DEB9BCEB67790A5641F3AD6AEADEEFE9AC4C511130F406C197A72EF658B64B5B91A0DF5B63FD6D12164B92CA493BE82071001F63DDE3CF8A8F534772DD546CD3C5F36F29F41ADB3AA9BD7FCEA6A9DD3CBD5E18F8F1EAEC369D1A5A94976E121B750839ECD00E15F127A56E3CC365BBDBA3DCE12A2C80704E52A1CD2AF3141E6ADB0EB0916A764E9CD277E8E1FC96E5CC69E29ECBA14271EF742472E438F2E6EAB5B14F9944EF7BBF27BC95BB7A29D56A68F378C475F19F0E91CFD5C78C408512D6E896B7C4B960E50123C093F7893CCD72AAB911'
    $JpgBin &= 'C1F47B3A2AAA9F3B74333B6928B840BB5BEEC985322B780A20939C9273D0839C1079D66DDDD8C4C4EF55AEECD8D54556EBA734CBD7BB29DA359F5E4075805B66E8C27FD6629E4B4F2ED119E6839191CD24E0F304F734DAAA6FC78BE47DBFE4EDFEC8AE2A9DF6EAE13FA4F8FCF973889787A6A540BC1996F96DA19DEFD92C13949E6935B4F3CDA683C89F4A0B8E8DBA6B06D5A7DBED2ECD65BBA4B648EC1D206129FC4E27182B1D3093BD81B9C7D75EB75558A78C737D47C8FECDD7D8B3372F4E2DD5BE299E39FCDE1FAF4E12E3AB4569D353D5DCB2B2E22ADA6A73AEDA6D9A02DD21B6DCB932F222CC7D7DCEDEFB9C12C3AA4A94B924F44B0D21D7C9E9D9247BC2BA1A3A339AFD9F5FBF5BC3F955A98A229D253C7D2ABFF18F74CCFAA69721DA1EA88B7ED592A65B5B5B16A6528896C657CDB88CA036C83F8B7120ABF1151EB5BEF18D7D3314A2129CA9478000649341FA3FF463D2474AECD62B4FA0264B890DACFF0001515F1EA3B65BEA49FBAA4D0756A05028140A05028140A05070FF00A5EECF0EB5D9DBEEC364AE7C7DD2CE0712E2492D7E654B6FC876E547D9A0F0D28AB566CB8632ABDE90052A4E3C4FDADC7339F52C3CB39FC2F8E8DD068297958DD51C8A0F51DB2E49DB1ECA18BC2561ED6FA5184C7BA359FB49F086772401CD4A4F1DEF5DE27DA40AA6F4EC79DCB9FD7EBFB387DB3A49AE8EFA9E31C7D5D7D9F2F5'
    $JpgBin &= '347658C8E3D7AD55554F2D864B2CF318E955CD4CECAA0C7A5426A4661D37627B4CB8682B908724B92AC32559911F392D13FBC6FC8F98EBF1C1AA7BCAAD55DE51BFAC75FDFE7C2794C6D68F5F7345736A9DF4CF18EBE31E3F3E13CA63D8165B942BBDB58B8DBA4B52623E80B69D41C850FF00AE9D2BAB6EE517688AE89CC4BDAE9F516EFDB8B96E7313F7EFEB1C921535ED6F5E6AAB568DD3CFDE6EAE8DC4021B681F1BABE894FF00D70AD6D46A69B14E677CCF08EB3F7C7A3475FAEB7A3B5DE57EC8EB3F7EE789B685AB2EDAD351BF78BABBE25F859641F032DF4424797F33935CDA2673355739AA78FD23C23F7E2F03A8D557A8B9372E4E667E1E11E11FBF16B2A455F15288A94293538A928950535644A512B6A19E752894E2565C455912B29A9BB68AB740B0D9266B1D4256C428EC15829202CA0F009467F78E9F023C81528F841239957FF7F53DD47F2EDCE6AF1AA37C53FE5E33E388EADCECCD37F696AB7FF2AD4E67FAAB8DF14FAA9E33E388EAE51B5ED7AE6A99ADC184E27B830F2A43CB6D25089525494A0AD293C43486D2865A49E21B6C120296B15DA7BC73EED57E741EBCFA046CF572E6BBACEE0C9ECCE3BBEF0E6DA17C0FF69E4641E63BB11C9541ED9A05028141ADED1B4F31AA3484EB43EC264171B56E36A38ED3C252A467A05A54A413D02CD07E72DA6C8BB66A8D47B20BCBD845D1C42AD321D1B8133900AA'
    $JpgBin &= '1BA73EC8750E29A567976C09F628397BC244590E30FA16D3ADA8A1C6D692952540E0820F22283BFF00D1BF52C3D51A666EC76FF2DB64C8715334DCA79580C4BC12A609E89738903CCAC712A1546A2D77B46238F275BB17B4BFB3F55172ADF44EEAA3C3C3C627131E318E132B52ADF2A04E7E0CD616C498EE16DD6963050B07041AE25553EBD6AD533115533989DF131C26277C4C2B699C2870E1545553A56EDB361AE44298D4B88F3B1E432B0E34EB6A295A14388208E208A845CAA9AB6A99DEBEEE92CEA2D4DABD4ED533C625EA2D89ED758D50DB361D48E371AFA06EB4F6025B9B8F21C92E79A791E69EA94F7F49AC8BF189DD53E37E51F93177B2ABEF6DF9D6A784F38F09FD279FADADEDE76C051DE34B69095E2E2DCDB834AE5D0B6D11D7A150E5C871E23535BADE36EDCFAE5E8FC94F2473B3ACD753E34D33F3ABF48F7F479E0009193F215C97D39F09C9A32F99A0CDB2DD27D9AE91EE76B96E4599197BED3AD9E293FE208E041E04120D4A8AEAA2A8AA99DED7D5696D6AED5566F53B54CF18FBFB87AE763FB50B66B7B496E62DA85798A8DE951CAB09524737119F77CC734F5E1827D0E97594DFA77EE97C4BCA2F26AF764DDDAA3355AAB84FE93E3F3F7C472FDB86DA17720F69BD1B214DC1E2895716CE1523CD0D1E88F3573574C0E2AD1D66BF6BCCB7EF7ADF25FC8E8B78D5EBE9DFC6299E5E3578F872E7BF747092'
    $JpgBin &= '918C62B9597D1E69895A7115653534EEDA5EB2DA64DE2E8CDBE2A32E3AAE249002475249E0001D4F01D6B62D5355CAA28A78FDEF713B4F536B41A7AB537B8472EB3CA98F5F3E91133C903B53DA45A8DA5ED3BA4A4179A536B81DE92149098DBC0BC539C12B90B42327A32D328C92A700F41451145314C7087C4F537EE6A6F557AECE6AAA733F7F28E4E2DDAAFCEA4A1D6FE8B5A265EB3DA7C25252447B7388794BDDC80F1C96BD3C3BAA7707810CA875141FA636F8B1E0408F062B61B8F1DA4B4D207BA948C01F90A0C9A05028140A05028140A050589B198970DE8921B4B8C3C82DB883C94923047E541F9F5F490D1B74D926D713ACADB1D2F5BE73CA1210E27EC9E2E2541D6DC03DC7DBED320638F6A060241A0E31AE2C916D9706A759D4EBF61B93664DB5E5F1586F38534E63F78DAB28572C90143C2A49217B66BAB6F5A1356C1D49627B725C657890ACEE3CD9F69B58EA950E1F9118201A84CAD8A773D1B7FB3D9755E9F4ED0F4237FF0092642B172B70C172D720FB49207B84F23CB88E98C73EB8EE6713E8CF0F0F09FD27D9C719F1BDA7D9B3A3AF6E88F327E13D3D5D27D9D33010ED8B5292424D665CDD999668B2AF96E557531344ACBF6C5249514D5354A9AA1BC6C7B68B70D0774EE924B92ACB21797E3F32D1FBE8F23E63AFEB5AF4DEAF4F5F796F7E78C75F18F1F9F09E5312D1EBEE686EEDD1BE99F4A9EBE31F'
    $JpgBin &= 'D5F3E13CA63D3B335558A2E9456A676E2DAAD9D97689752ACEF79240FBD9E18FCEBAD56BAC458EFF0039A7E333D31D73BB1EF7B2AFB574B4697F8ADACD1F199E98EB9DD8E5CDE42DAB6B7B96BBD40A9F272CC26894C38D9C8691E7EAA3D4FF002AE3F7955CAE6EDCE33F08E91FACF39F0C447CFB59AFBBADBD376E7B2394474FACF39F0C44696A6874AB62E3562B5A537564569C54B4B455B4D49C54B2A4D5B4D4B2256D483E556C4AC896D1A234A9BAAD572B929B8F6B8E953AE38F2F710529E2A52947D96D3EF2BE438D73F51A9B97AE7F09A59F3FF155CA88EBFE29FC31ED9DC959B57B5B7FF85D36E9FC5572A23FF69FC31ED9DCE6BB6DDA0A356DC5BB4590B88D3D0164B1BC9DC54B771BA5F5A7A70F0A13EE27F12964F5F4DA5B7A5B516ADC6223EF33E33C65F44D0E8ECE8AC5362CC629A7EF33E33C667AB98D5ED96D5B32D1F375C6B287608497375C5054871B4EF169A0405280EAA2484A41C654A48EB41FA91B36D2F0F48692876688CB6C869B4EFA50721242424241EA1294A5393C4EEE4F1268366A05028140A0F1FF00D3A3652E4B889D73668C4BF142D6F840E25BC95B83E293BCE8F453D93E148A0F30EB450D5B664EB98E02EE49288FA85B03897CF044BC7DD780F11E8E85138ED102835082EBD1E537218716D3CDAC2D0B428A54950390411C4107AD46653A697AA34B5EE3ED9B4E09690DA35FDAE3813E'
    $JpgBin &= '32404FD6EC24603ED8EAEA46029239F4E1BA073759A69AFF00E651C79C75FDFE6F75E4B76FD3A6C68F5538B73E8D53F866794FF4CCFF00A677F09947C5B72963D939F85723197D376FBBDD2CFF00AA56403BA788ACEC2BFE2A165EB738D94900829E208E879E6B1344C274EA29AA3128C92C767C48E0390A8630DBA2E6D30D6924E4FE545B12A303CBFA5197C38F89A32F9415216B49250B52494949C1C6411823E041228C4D313C4CD19307CA82B8F1DE9521B8D1DA53AF3AADD421232547C8566989AA629A63332A75176D58B555EBD56CD14C6666797DF28E333BA37A176B7AAE3E96B4CAD0F6290DBD779492D5F66B472184F588DABCFA3847F075583E8F49A68B14EFE33C5F0CF28FB76BED7D46698C5BA7D18F9CCF8CF3E9188E599E195B4F3AC9831A44D98CC386C2DF92FB8969969B49529C5A8E129007324903141FA45F44ED9835A0B42477E4210BB84A495B8E278852958DF503D53E14A53D0A501431BE45076DA05028140A05028140A05028141A4ED7F41DB3681A426596E31C3A5C68A518212AE87014791C84A81E414919046410F036A9D9BEA2D08B95A6752C5932F4ACB78BB0EF2C475AD109F1E10F2929C96CF0DC75B3C481C37CB683589661A4C1D15AADEBB3B6D8DA76E532434405F748CA7D2410085052014A92A0410A07041041208A84AF898768D8FE93DAD686BCA6F36BD353D0DBA8ECE5C47921'
    $JpgBin &= '4DC96BAA168CE4F5C1C6474AC4D11544C4C66250B914574CD356F897778BA32DF7F68DC6C70245B24E37A559E520A1C60F528CE37919E47F9721A7366AB5C37D3F18FAC7C7D7C5E6EFF64CDAAB36B7D3F18FAC7C7D6BA3433A7816F77AAB8721D7F4CD3673BD4FF03331B9AA5FB4F163787678C7A72AD6B94E1CBD4599A5A4DCA006D44118AE7DCAB0E45DDCC17E64F36B4DA8CA78C243A5D4B0547702F18CE396785696288AF6F9FDEFC75C6ECF1C6E73EB9889CFFB67AE38671BB3C708C5307CAAEEF1AFB6A54C1A9C5C662B595B38FF00AC55B4D6B22A63B8D81E55B14D6BA9A86623AFF14E528271BC46067C8799ABE9AB1199E0D8A77C667836BB6693B742B5B97ED5121AB6DA6360BAF49594E49E21240E249C706D20ACF1E1C2B528D45ED7CEC68F753CEBE5EAA639CF8F08F16CE8B497FB527674BBADF3B93F2A23F14F8F08F172BDB1ED227EA98C2C962812ED7A5DB50385B7B8E4D29F656EE38048E696C1294F32547C55DCD1E8ED692DF776A37719EB33CE6679CCBE81D9FD9F63B3ECC59B1188F8CCF3999E733F7B9C8EB65B8CAB7C4953E731060C7724CB90E25A65969254B716A3809007124938C507E867D123636CE82D36DDE2E6DB6EDDE580EB8E70237B040DD3F7120900FBC4A95C4146E87A0A8140A05028141837AB7C6BA5B5E8129214DBA39F0CA48E21433D41C1A0F06ED77629A97673AC66DFB495'
    $JpgBin &= 'A4DE2C2FEF3770B534852B0C39ED36503C4A6558CA549CA9B5279853616438D5CB49CE45C19558615C2E70266550948614B78631BCD38948E0EA0901431D52A1E15249AE5753C1BE685D99ED3E25C22DE2D7A6EF56F9719C0EB2F96FB0710A1D405107F4E3D4522259DA87A5EC56C91AAD28775058DCB0EA93C1E0E325B8B7257DE49E4874F519C13F138D4BDA48AA76A9E3F37A6ECAF296EE9EDC69EFCE688E13CE9F0F1A7C38C72E892FF429D4E5B5475B6E278142C711FD6A8FE1DDDFED98E39DD3CF9213526983114A6FB3F124615F1EA3E5CBE5555CB386FE8BB4BBDDF973CBDC0EC94722B4ABA70F51A6BFB50D624A7754462A975A89CC315592791344F7001F4A19303AE6865F787A7E7437991E7F90A1866D9AD53EF333BADBA3A9D5849538A2708692064AD6A3C129001249E82A76EDD776AD9A2333F7C5A9DA1DA1A6ECDB1DFEAABD9A79759F0A639CFC239CC20B5BEBD8FA720C9B2ECFDC72E1737125A9DA8196D5B8D0F79B8A7F42EFF73A2CF7F4BA3A74F19E3575FA3E2DE51794BA8ED9B9B38D9B54F0A7F5AA79D5F08E11CF3C1C820904107AE6B71E654D07ADFE85DB11767CB6B5CEA28AA4B3BB984D2C60A5B50F6FF89693E1F2412AE054DAA83DBC84250808424252918000C003CA82BA05028140A05028140A05028140A0D6B52D994EAD77084825D3C5F693CDCC0C6F27F18000FC4000792480D75B50'
    $JpgBin &= '71086DC5E463ECDCE381C4F03D719CFA839F5151499715B29737563041A90D9AD71924216B4714F1492391F4A30CF7E332F21495B693BC304E2A334C213444B9EEB6D28F3CD29F8884BA90388482555CFD4DBAA9899C6EF0DEE2768696BC6D4467D5BDC3F535BDC8EEA92EC75A083EF022BCEDDBF4553314CBC56A2E51333112D4E435859C240AD1AAEEF72AEDCDEC45B47269175A555CDEB2E326ACA6EB31714B36F952DCDC8F1DD7947A2104D5B3A9A2DFA75442DEFA9A78CE1B2D87677779E0BEEB210D238AD6A23B340F352B2123E647CEAFB37AF5FF00EEF6E6AF19F369F7CF1F644BA9A3D2EAF55FDDED4D5E33E6D3EF9E3EC894FA23696D327B4462F37148C00D9C328F42BC711E881823DEAE9D9EC6AAECC55ADAF6FF00A63751EDE757B77783D568BC94A6662BED0AFBC9FCB1BA88FD6AF6EEF069DAAAE122F53912E786D4A60111DB4A30DC707986D3EEE7032799C649278D77A9A62988888C43D7D34C53114D318886AD7024E7279D6596817FD20C5CE6A3EAD6D4D4B79610969968ABB5513800247BC4F973F2A0F527D15BE8F51F4E046A9D4CDA245C9C41080A00A5A491828474E238294398CA52774A8A83D500000000003800283ED028140A05028141177EB522E4C24A5494496B3D93846471E6950EA938191E808C10080D39497A338EB121B5A704075A51C949E3820F5EB8572233CB88114971A6B7540E'
    $JpgBin &= '42927D9579FF009D6604F5AE38746EA91BC9230411906B227551D95A521C6D0BDD1C09158988922BAA9DD12D4B5769A54B6D6A8C12B246704F8FE5E7545DB3B5C1D9ECFED28B53115CBCFDAF6DAB83256879A5A4E7DE494FE84035C6BF4ECCE25F4FEC9BDDFD11551BE3C37FC9CDAE384AF80038D69CBD459DF08E71473586C44428249EA686E2894466710CFB259EED7B9223DA2DB2E7BA4E30C345407C4F21F3ACDBA6AB938A233EAFBC35F59ABD3E869DBD5DC8B71FD53899F54719F6436E87A1A0DB007B565D50958E3F575B941D78FA2DCF61BF5E2543CABA567B2EAAB7DD9C7847D7E9EF782ED5FF0088362889A3B3A8DA9FCD54623D94F19FF363C695BD49726A5DB7EA7856F8F6FB3820986D7883A4710A75478BAAC8078F00464006BAF6ED516A9D9A2310F99EB75FA9D7DE9BFA9AE6AAA79CFCA39447846E6A33B8020700390F2AB1A8D275658A0DD52A53A80DC81ECBC81E2F9F98A0E87F46CFA3ABDA8EEF1EFDA8D0176A64A5D65875AC21E1CC2D693CD1D424FB7D7C1ED07BB6D70635BA13712237B8D2075E2544F1249EA49E24D0665028140A05028140A05028140A05033414950141057AB435254A91192843CA395209C25C3E7E8AF5EBC883818C6194435BED12DBA9502838E230A47A1F4FCC791E74865396B9206073AC89254B68273BD44503779642CA90B2950E441C5126B1759DDB829991A2CC4FFE'
    $JpgBin &= 'D9A04FE6307F5AD5D4692C6A2317A88ABD7112D5D4E874DAA8C5FB7157AE225AB4EB5E9690A2A7B4F361479969F29FD140D72EBF2774157A34CD3EAAAAFACC3897BC91ECBB9BE289A7D5555F2CCC7C114F583470249B4CD1E81F47FF00D2AAFF00E31A5FFA95FF00AA3E8D19F21FB3E673B75FFAA3FF005522DDA4A28DEFF47DC5797692464FC8207F3A9D3E4D68A3D2DAABD754FE985B6FC8BECBA7D28AAAF5D53FA616DEBE7764EE5B6D56E860723D976AAF9EF920FE55D0D376568B4DBED5A889EB8CCFBE77BB1A4EC4ECFD1EFB166989EB8CCFBE733F16BD7BB95C2E2419D31F9013ECA56B2529FE14F21F2AE83A8D72675A0869C95046F949DD564056381C73A08FB7592E97FB80836A88B90F1E2A23825B19C6F294782474E3CCF01C48141E8FD8D6C5ADBA6F72ED7B0997715279A924048238A520F14A4F239F128703BA0A9043B5A371290948094818007000505608A0FB40A05028140A0F848A0F85605046DDE0C6B8206FF81E40210E819233CC11D5278647C0F020101AE18EFC378B4E20615EE8394AFD527FC398E3CC713149256D9012A1824F966A4275329BDD05478E288A32EF292A4652787F2A0D4EF328BED299928665347816E436971247C140D42AA62A8C4C65759BD72C57B76AA9A67AC4E27E0D1AEDA4F444F51549D311D970F58925D607E40948FCAB52BD069EAFC38F5661E934FE5976D588C45FDA'
    $JpgBin &= '8FEA8A6AF8CC4CFC5AECBD9DE860A39897C67D133D2A1FAB755FF65D9EB3EFFD9D1A7FE21F6AD3C68B73FE5FA4C31C688D08C1C9B6DE2463A3971091FF000B748ECBB1CE667DBF446BFF00885DAF5479B1453EAA3EB32BCD40D2F6E39B7E91B5850E4B965C92A1FDF56EFE957D1A0D3D1C288F6EFF009B93A9F2BBB6B531B35EA2A88FE9C53FFE62145D6F5749318C55CB5371B18EEEC2434D63F810024FE55B5111118879EAAAAABAA6AAA7332D5E672ACA2879895292B2949213C5440E5F1A0847987E5484468CCB8FBEEA825B6DB495296A3C8003893E941D7B645B0E54C90CDE755A51D9A4EF2229C2D03F8BA2CFA7140EBBDC5003D2D6D8D1A0454C688D86DB4F4CE493D49278927CCD066050A0AB340A05028140A05028140A0507C2682852F141656F63AD063B9271D68315D98075A24C3952197B05C1E24FB2A1C08FFAF2E468319A95DDDD0B6DDDC23DE0387CC7F4CFC05048B7708521B1DF1BEC73C03CD9CA09F88E47E34CB0B72EC66537DA419A8524F2DEE20FCC7F4A196BB72D377A464A6287879B6E0FF1C1AC619896BD2ECD77413BF6C9891F7BB1563F3C561899473D6FB8367ECEDD314AFBC5857E831526188BB15F241CB767B8AF3D4465FF003C505D6367DAB2611BB6C2CA4FBCF3A94E3E59CFE9412B1363EF7665FBE5F63C565032BEC51BD81FC6AC01F91A0C192BD9D69E78C4D39627757DE520E14E'
    $JpgBin &= '65E693F895C37481E6949F88A08591A52F9ACAEA8B8EB0B8A1A6D0375A8510808651F752465291CBD9DF27A9078D074AD2568B2E9F8A862DB1196824E46EA791C633C7249E9BC49563867141B433341EB4196D4A07AD06421FCF5A0BE973341702B341F681414955050A73141656F63AD06339271D68315D98075A24C49131B71050E04A9279822A230CBEDA1590B51F239F10FEBF3E3EB41231EE8DBA9DD92DA5F40E6E37ED247A8E7F3FE752CA2B8BB7C4B8B6550678F549F163E5C08A3283B9699BC0C9690D3E3F02F07F5C563044B5B9D63BD21477AD72CFF0B655FA8CD61999453D02E69F0AADB308F22C2811F0E1524588ED9AECF7EC2D739CF41197BDFCA8296B44EA9987EC6CD2123CDD296FFE62282520EC86F728833EE10E120F30805D58F9701FAD05172B16CC3491DDB94993A82E40E130DA5EF657E5BA8C01F0513F0341057C89A9757A136E72244D29A7D0BDE45BE3B602D44722B40C655FC7B83A804D06D3A274869DD3C9DF8F1838FA9385BAE1DF5AC79156070FC20049E19048CD06FAC4F18001E14198D4CCF5A0CB6E467AD05F43B9EB41792BA0AC1CD07DA05028140A05028292682DAD5418CEAE830DF771411F264119E341172A591939A248B93705249E3511152AEE520F88FE746514EEA77E2ACAD97D4856307079D0C2D47DA5F747BED6228A89F6E2B85A59F97B27F2A184E46DB3D96380999765'
    $JpgBin &= '32B3FBB97137B77E2B6CFF008511984BC3DB069574051BE69E715EB72EC88FECAD031F9D49866FFDABE9B29CA6E16557C2F31F1FF35061CBDB069E68102E9A6D07CDCBD215FA212AA0D76EBB6884B0A433A9EDCCF97D5F01C90AFEF38529FD28350B9EB6B65DDD0B929B9DD959C83709443693E696DBC01F0C9A0CA87A896E34196D0CC76339EC586C368CF9EE8E19F5A09B837552B1E2A09C853D471C6826624B271C682563482473A09161E3C38D06734E5064B6AA0C8A0A54682CAD5418EEAE830DF748A08F90F919E341172A51E3C6822A54F29CF1A8A48B93765273E2E5465132750B8CAB7D0E94A871041E5430C756D15F8AE854965A9583C17928707AEF2789F9D0C256DFB6AB5324264CD9D171CC48653213F9A4855672C4C27A06DA34B3E3C57EB093E4EC95C73F92D07F9D65149236B3A656329B9D8D7FC37963FC48A0C795B5BD3884906E5A7D3FEF2F8D0FF941341073F6D169196DAD47616F3C951D0ECB50FC825341A95FF68B1AE396E5DCAF7746D5C93BE9891963C8A51927F3CD060DBF5321B1BB6E8916DE82307B04616479159CA88F89A098817652B1E2A09D857151C71A09A87349C71A0978B249C71A0938EF93D6833D974D065B6BA0C842A82E034155028140A05028285505A705062BA0D060C849E3411B29078D0444C6D5C6820E734BC1C50405C59730460D630CC4B5E9D0DE502A51284799EBF0'
    $JpgBin &= 'A619CB58BBB2FA77931D0539E6A3ED1FE94C1B4D2EEF6A96E6F6378D651CB50B9E9D9EB2774AC50413DA32E0B777D2EBC3D3341256CD2F3DA232A59A0DB2D36698DEEE77A836EB55BDF18DE06836BB643786381A0D9ADD1DC18E06836280CAC6381A09D84DA86282622215C282523A4F0A0CF641A0CB6850651E54142A82CB828315E068305F49E3411B25078D044CC428E682126B4BE270682067B4E6E9E078D19CB5CB930E9CF0358C3396AF7688FA81201A60CB53BADB652F38C8ACE18996A375B0CD71471BC3E1461AE4DD233DE567B47527D282EC0D2970654015B87E341B3DAAC73118C85506E5648B2D9010A1BE83CD2AE46836CB6DBD4B00B3907EE2BFC0F5A0D86DD15D49008208E941B1DBD958C703413D09A570A09A88DAB8504AC649E14124C24D066340D064A0505E4F3A0AA8140A050281402282DA934169C6F3418AEB39E94186FC5CF4A0C0910B3D282364DB77B3E1A08B936A07242378F991C28226658CB84952493EB41132F4D8513F67FA5045C8D28957EEFF004A0C07747209FD90FCA82C9D169CFEC87E54175BD1A8FF00BAE3F0A0CC8FA4929FDD7E94125174C84E3ECFF4A0958960DDC783F4A0968B66DDC78682562DB318F0D049C7838E94120C45C74A0CE658C74A0CA6DAC505E4A31417683E114142939A0B0E379A0C6759CF4A0C37E367A5047C8859CF0A08D956ECFBB41172ED3BDEED044C'
    $JpgBin &= 'BB1EF67C141152F4E850F63F4A08A91A582B396FF4A08F7F4825478B5FA5063AB46233FB11F950548D1A8E45A1F95064B3A452923ECBF4A0918DA5C271F67FA504AC5D3DBB8F0504C45B410005A3780EBD4504A45B501C40C81E9CA824E35BF18F0D04947878C70A0CF66363A5065B4CE283250DE282F2534158140A05028140A05028141F08068295201A0B6A641E9418EE309CE00DE5797F5A0B0B8215ED0CFA7414165CB7A4FBB418EE5B127DDA0C772D093EED059559927DCA0B46C88FB9414FD469FB941F458D1F7282E26CA9FB8282F22D091EED064376B48F768321BB7247BB4190DC203A505F44503A505E430074A0BA96C0A0AC240A0FB40A050283E148341429B0682D2D807A50595C607A5063B90C1E9418EE5BC1F768319CB624FBB418EBB424FBB416176649F7282D2AC693EE5051F5127EE507D1634FDCFD282B4D913F7282F22CC91EED05F6ED291EED064376C48F76832116F4F0E1823A8A0BE88BB9ED27879814192DC74E01141792C81D282EA50050540507DA05028140A05028140A050283E29412324D051852F9F853E5D4FF004A0AC25206000050374507CDC141F3B24D052594F9507CEC13E541F3BBA7CA81DDD1E5FA503BBA7CA83EF609F2A0FA194F9507D0D2682A08141F424507DC5028140A05028140A05028141F30283E148A0F85B1414964795052584F9507C3193E541F3BB27C8507CEEA'
    $JpgBin &= '9F2140EEA9F4A0FA2327C8507D11D3E54150613E54150680E941F43605055BA2828DCC1CA0E0F974341F52A19DD23755E5E7415D028140A05028140A05028140A0B7BC55C1BE3F88F2FF003A0A92900E4F15799A0AA8140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028141F14028608C8A0A30A472F127F51FD682B4A828641A0FB40A05028140A0502829528038E24F90A0A774ABDBC63EE8E5FE741728140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A050281414A9209C8E0AF31414EF14F05F0FC4397F9505CA05028140A0F8480324E050500A97CBC29F32389A0A929091C07C7D682AA05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A0B7B853EC631F74F2F9795054950271C41F234155028282BE3848DE3D7C850128E214A3957E83E1415D028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A0A5490A1C47C3D28292549E7950F30388A0AB7D1F793F9D05540A05028140A05028140A05028140A050634E97161349765C962336A712D85BAE0402A5282529C9EA49000EA481418726FF00'
    $JpgBin &= '628CD38EC8BDDB996DA756CB8A72521210E21256B4124F052520A88E60024F0A0ADCBCDA1B71E43D758085B2A690EA552100B6A7783615C7815E46E83CF3C33414FF00A4163EC3B7FAEEDBD9774EFBBFDE91BBDDFF00EFB39FD9FE2E5EB4176E576B5DB56C22E37385095257D9C7121F4B65D5FDD4EF11BC788E02822ADFAC2C32EF536CEA9CCC49D1669841890EA10B90E06D0E12D277B2A187074CE41E1419B2AFF618D04CD7EF16F446CBA03864A37545A0A2EA41CF129085950E9BAACF2341048DA7684541B55C0EA6B6A235CD6A6D8714FA1212B4B61C525C24FD990149C856305690789141B1BB7AB3B5776ED0EDDA03772753BCDC3548407963CC233BC4703D28311ED55A6196DD75ED49676DB657B8EA9539B010ADE52704EF703BC852707AA48E8682D31ABB4E3FAA9ED2EDDE627D6ED34877BB179216B0B4A9637067C44253BC40E49209E0450675BEFB64B8BD29AB7DE2DD2DC8871252C4942CB3FC601F0F23CFCA8238EB1B0392ED4C409EC5C937396E4469E84FB6EB6DB88696EA82D415C3C283CB272470EB412C8BB5AD76AFAD917286AB76E15F7B0FA4B3BA39AB7F3BB8F5CD061BDA9F4D336D8F737B515A1B83215BAC495CD6C34E9F24AC9C28FC0D0573B5169F812531A75FAD715E56E6EB6F4B6D0A3BF9DCC0273E2DD563CF071CA8322D976B55D3B616DB9C29C63B9D9BFDDDF4B9D92FEEAB749C1F43'
    $JpgBin &= '419F416643ED468EE487DC434CB482B716B384A52064927A00283519FAFA3C5D231F5537A7AF72EDAF32EC8538D2584169941F0B8B0E3A8E0B4F8938C9C7300F0A0C399B51B6456A5487AC5A8046808655717BB068261171B4B810E24B9BC5412B4E7702867913412B78D6912D77D62DB2ED17A4B0F4B661A67F7602376CEE371209505AB25406F252520E413C0E02DBFAEE031774437AD17A6A22E70B7A6E4B8C1318C82ADC08C956FE0AFC3BDB9BB9EB417226AF13752CDB2C3D397B929832C44933901811DB594217C72E859012B493841F9D0494EBFC48BA96DFA7FB379E9D35B71EDD6920865A40E2E39C7C292A2948F327D0E02374DEB0FADF52C9B03BA72F56B951A2A6538A9818280952B75232D3ABC2958510081C126836BA05028140A05028140A05028140A05028140A05028140A05028140A05028140A0502835DDA3DA245F743DDADB0C0335C60B9101207DBA085B5C4F01E34A78D073AD1DB3CBE2AFB346A3881BB6DC624A9D2076C85EE4E9884B6EA3009F6501632381DFE04F1A0C5D09A135933A96CF74BFC54A51254CBD781DE10ADC721B6B6E37251CEF1295F0CE377070683123ECD355A2EEC85444882DCA3663F6EDF1B38921F0BC6F7503B3DDF6B3C718A0DAF6A964D417E55B6E168D30B5DC184C861264C98CA69292E2301F697BC95B2B080ACA4F689C278039C05BB968CBB3D36F53516964C991'
    $JpgBin &= 'ABEDF3D8777DBDF315AEEDBEBDECE401BAEF84F1E781C78861DBF4BEA9EFD65B4BF615370ADF7ABA4A767AA4B25B71A90893D994A02B7F9BC90410083D08C9015DBAC3A9A2694D0FBFA496E4CD312035261A6547DE94D888A64BCDA8AF77054A070B295784F0E54145CB446A291B4D97356C4D76D726F512E687D97A221B40650D8C2CAD0A7F7816C80941DD20F34E4D0513B445D9AD04CC7674EADDBC22F93A7031A4C743A8ED1C7FB3708732DBA9285A12A42C8F0A8F518A09BD3963D436ED59DBCBB2C608B8D821C47A54153686A0C8650F6F008242B7095A427701C70CE071A0D56DBA07544AD3EBB52EC91ECAF44D20FD8C3FDE5B52673EB2D90B1B84908FB35125601CB87873A0CAD51A2AF5AC19B7B0DE9856911DE54995223CB614F6E77275A0A504120A7794946012A2951C84D04FDE6DFA96F9B39876B7F4C2224F82A8121C861E644792597D2A7196F75442414B608DE0061691D15808DBBD8AF6EDCA35FA36CF58DC722DC233B6B4CB8FBE85BE5A297D6490DE541B21412A51008E7C4008F93B3ABE8D2F7EB7BB6C8F366B9A4205AE1BBDA3677E4349743894951052325B393807879700DEF4CE9F7ED5AF6F93DA82D45B749B6C062396B712952DA2FEF8DD1C4602D1C48EBC39506CEB61F33DB92263A9650D290A8C128DC5A89042C9C6F6400400081E2390786035FDA5E9DB8EA8D39F5340B9B1012EBEDAA4'
    $JpgBin &= 'F6EC29D44865272A65412B490951DD0704646475A0D5ED9A7759CAD2965B16A14A24A4EA071FB8A82C6130DB75C75A4E0AD44A54B4B402413BA821247026821F5EE83BADD6FDA91E46976EE570B9BCC2ED37D329B47D589421090082A0B4EE2D2A5F802B7B7B8D06C5AAED1A92F5ABED64E9E8C9FAB6EACC9877D6E42125B88374BCD2904EF95AF0A4600DC2140E46283060C0D4971D622E1AB74BDFE7A58B92956F4A27444DBE1B6970869EEC83C16B584E1454A492093BA060507CBD691B8CBD7499D0B49310A50BE313957E6A702151D010168282ADF0A5A13B85013B87392682EAB486B487B508DA898BC45970E65D14E4DDD654DB8CC34B2E25A655F6B85A0150C009F6D5BE738C506D1A0ED73E1AAF773BB305BB85CEE8F3C415A5443083D9B09CA4918ECD0938E85473839A0DAA8140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A05028140A050283FFD9'
Return $JpgBin
EndFunc
Edited by PhoenixXL

My code:

PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.

Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners.

MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. 

Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.

Share this post


Link to post
Share on other sites

Try this:

;coded by UEZ build 2012-08-10 beta

#include <GDIPlus.au3>

_GDIPlus_Startup()
$sIn = StringReplace(@AutoItExe, "autoit3.exe", "ExamplesGUImsoobe.jpg")
$sOut = @ScriptDir & "Watermarked.jpg"

$r = _GDIPlus_WatermarkImage($sIn, $sOut, "Watermarked by UEZ", 170, 50, "Arial", 64, 45)

_GDIPlus_Shutdown()

If $r Then ShellExecute($sOut)
Exit

;======================================================================================
; Function Name:        _GDIPlus_WatermarkImage
; Description:              adds a text to an image
;
; Parameters:               $sBitmapFile: image file to load
;                                       $sSave: filename for saved image -> if no extension (jpg, bmp, png, gif, tif) is given the default is png image format
;                                       $sText: text string to draw onto the image
;                                       $iX: x position of the text on the image
;                                       $iY: y position of the text on the image
;                                       $sFontName: font name to use
;                                       $iFontSize: size of the font
; Optional:         $fAngle: angle of the text -> 0° - 359°
;                               $iFontColor: color of the text
;                                       $fAlpha: alpha channel of the text -> 0.0 (transparent) - 1.0 (opaque)
;                                       $iJPGQuality: JPG save quality -> 0 (worst) - 100 (best)
;
; Requirement(s):       GDIPlus.au3
; Return Value(s):      Success: 1
;               Error:
; Error codes:  1: image file to load not found
;               2: unable to create bitmap from loaded image
;               3: unable to save watermarked image
;
; Remark:                       don't forget to start _GDIPlus_Startup() / _GDIPlus_Shutdown()
;
; Author(s):        UEZ
; Version:      v0.99 Build 2012-08-10 Beta
;=======================================================================================
Func _GDIPlus_WatermarkImage($sBitmapFile, $sSave, $sText, $iX, $iY, $sFontName, $iFontSize, $fAngle = 0, $iFontColor = 0xFFFFFF, $fAlpha = 0.05, $iJPGQuality = 90)
    If Not FileExists($sBitmapFile) Then Return SetError(1, 0, 0)
    Local $hBitmap = _GDIPlus_BitmapCreateFromFile($sBitmapFile)
    If Not $hBitmap Then Return SetError(2, 0, 0)
    If $fAlpha < 0 Then $fAlpha = 0
    If $fAlpha > 1 Then $fAlpha = 1
    Local $hCtxt = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    Local $hBrush = _GDIPlus_BrushCreateSolid(BitShift(Int($fAlpha * 0xFF), -24) + $iFontColor)
Local $hFormat = _GDIPlus_StringFormatCreate()
Local $hFamily = _GDIPlus_FontFamilyCreate($sFontName)
Local $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, 0)
    Local $tLayout = _GDIPlus_RectFCreate(0, 0, 0, 0)
    Local $aMeasure = _GDIPlus_GraphicsMeasureString($hCtxt, $sText, $hFont, $tLayout, $hFormat)
    If Not $fAngle Then
        _GDIPlus_GraphicsSetSmoothingMode($hCtxt, 2)
        DllCall($ghGDIPDll, "uint", "GdipSetTextRenderingHint", "handle", $hCtxt, "int", 4)
        _GDIPlus_GraphicsDrawStringEx($hCtxt, $sText, $hFont, $tLayout, $hFormat, $hBrush)
    Else
        $fAngle = Mod($fAngle, 360)
        Local $iW = Int(DllStructGetData($aMeasure[0], "width") * 2), $iH = Int(DllStructGetData($aMeasure[0], "height") * 2), $iQ
        If $iW > $iH Then
            $iQ = $iW
        Else
            $iQ = $iH
        EndIf
        Local $hBitmap_Rot = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iQ, "int", $iQ, "int", 0, "int", 0x0026200A, "ptr", 0, "int*", 0)
        $hBitmap_Rot = $hBitmap_Rot[6]
        Local $hCtxt_Rot = _GDIPlus_ImageGetGraphicsContext($hBitmap_Rot)
        _GDIPlus_GraphicsSetSmoothingMode($hCtxt_Rot, 2)
        DllCall($ghGDIPDll, "uint", "GdipSetTextRenderingHint", "handle", $hCtxt_Rot, "int", 4)
        Local $hMatrix = _GDIPlus_MatrixCreate()
        _GDIPlus_MatrixTranslate($hMatrix, $iQ / 2, $iQ / 2)
        _GDIPlus_MatrixRotate($hMatrix, $fAngle, False)
        _GDIPlus_MatrixTranslate($hMatrix, -$iQ / 2, -$iQ / 2)
        _GDIPlus_GraphicsSetTransform($hCtxt_Rot, $hMatrix)
        DllStructSetData($tLayout, "x", $iQ / 2)
        DllStructSetData($tLayout, "y", $iQ / 2)
        _GDIPlus_GraphicsDrawStringEx($hCtxt_Rot, $sText, $hFont, $tLayout, $hFormat, $hBrush)
        _GDIPlus_GraphicsDrawImageRect($hCtxt, $hBitmap_Rot, $iX - $iQ / 2, $iY - $iQ / 2, $iQ, $iQ)
        _GDIPlus_MatrixDispose($hMatrix)
        _GDIPlus_GraphicsDispose($hCtxt_Rot)
        _GDIPlus_BitmapDispose($hBitmap_Rot)
    EndIf
    Local $bRes
    If StringRight($sSave, 4) = ".jpg" Then
        Local Const $sCLSID = _GDIPlus_EncodersGetCLSID("JPG")
        Local $tParams = _GDIPlus_ParamInit(1)
        Local $tData = DllStructCreate("int Quality")
        If $iJPGQuality < 0 Then $iJPGQuality = 0
        If $iJPGQuality > 100 Then $iJPGQuality = 100
        DllStructSetData($tData, "Quality", $iJPGQuality)
        Local $pData = DllStructGetPtr($tData)
        _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData)
        Local Const $pParams = DllStructGetPtr($tParams)
        $bRes = _GDIPlus_ImageSaveToFileEx($hBitmap, $sSave, $sCLSID, $pParams)
        $tData = 0
        $tParams = 0
    Else
        StringRegExp($sSave, ".*.(gif|png|bmp|tif)", 1)
        If @error Then
            If StringRight($sSave, 1) = "." Then
                $sSave &= "png"
            Else
                $sSave &= ".png"
            EndIf
        EndIf
        $bRes = _GDIPlus_ImageSaveToFile($hBitmap, $sSave)
    EndIf
    Local $err
    If Not $bRes Then $err = 3
    _GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hCtxt)
    _GDIPlus_BitmapDispose($hBitmap)
    $tLayout = 0
    If $err Then Return SetError($err, 0, 0)
    Return 1
EndFunc

Br,

UEZ

i was your script editing to

_GDIPlus_Startup()

$sIn=@ScriptDir&"desk_back.png"; StringReplace(@AutoItExe, "autoit3.exe", "ExamplesGUImsoobe.jpg")

$sOut=@ScriptDir&"Watermarked.png"

$r= _GDIPlus_WatermarkImage($sIn,$sOut,"AutoCool",110,350,"Arial",60,0,0x000000)

;~ $sBitmapFile, $sSave, $sText, $iX, $iY, $sFontName, $iFontSize, $fAngle = 0, $iFontColor = 0xFFFFFF, $fAlpha = 0.05, $iJPGQuality = 90)

_GDIPlus_Shutdown()

If$rThenShellExecute($sOut)

Exit

out put png is

Posted Image

i need png is

Posted Image

$iX , $iY,$iFontColor is Wrong behavior too.

how?


I interest am many quite in AutoitScript.From that is [http://cafe.naver.com/autoitscript[/color]] Korea of cafe(blog) to be operating, [size="2"][color="#ff00ff"]English cannot well[/size].Many help it requests.To read, it stands it thanks.

Share this post


Link to post
Share on other sites

#9 ·  Posted (edited)

Thanks davidkim for reporting it. I update the code from post#4.

I forgot 2 lines for setting x and y position... :whistle:

Br,

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

Thanks UEZ for you code. It works very well...

I have two questions, it's possible the center the text on the image?

It's possible to detect if the test is too big for the image, cut the text and send to the next line?

Share this post


Link to post
Share on other sites

#11 ·  Posted (edited)

More or less everything is possible! ;)

Currently I'm working to add the watermark feature to my screenshooter app where you can select the area on the screen where you want to place the text. When it is finished, can take some time because I'm very busy at the moment, I will update windows screenshooter.

Meanwhile I will modify the function to position the text on the bitmap selecting one of the 9 positions. Regarding the line break I have to think about some possible scenarios how to implement it properly. If the text is in the center it is ok but for the buttom possition it can be a problem...

Br,

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

@ricky03: I update the code from post Please try again and post your results.

Thanks,

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

It works very well, but I have more one question, it's possible to add a position 10

And with this position, the Y position is used but the text is centered, it's possible?

I have a warning, because $iDeltaPos is not used!

Share this post


Link to post
Share on other sites

The line with $iDeltaPos (81) can be deleted (I forgot it).

Regarding your 2nd request: of course it is possible but consider all possibilities will go beyond the scope.

Let me think about how to implement it without production too much code.

Br,

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

@JScript: you are welcome! :)

@ricky03: I added two parameters $iAdjX and $iAdjY where you can adjust the x respectively y position of the text!

Br,

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

whenever I watermark an image, the watermark is always dark grey for some reason. I tried changing the color to a lot of different ones. Any ideas?

Share this post


Link to post
Share on other sites

whenever I watermark an image, the watermark is always dark grey for some reason. I tried changing the color to a lot of different ones. Any ideas?

You mean the font? Which code did you used? The one from post#4?

Br,

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

Yes, I am sending the code from post 4. When the image opens, it is always really faint and its a grey color.

Share this post


Link to post
Share on other sites

#20 ·  Posted (edited)

Can you post the created image?

Is it working with this: http://www.autoitscript.com/forum/index.php?showtopic=145873 ?

Br,

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Similar Content

    • DeathChicken
      By DeathChicken
      If possible please add or edit the comments to explain how this works.
       
      ;includes functions from other things
      #include <GDIPlus.au3>
      #include <ScreenCapture.au3>
      ;hotkeys
      HotKeySet("{ESC}", _exit)
      HotKeySet("{F1}", _scan)
      ;global variables
      Global $win_title                    ;name of the window
      Global $area_x                        ;
      Global $area_y                        ;
      Global $area_w                       ;
      Global $area_h                        ;
      Global $cursor                         ;
      Global $rect_file                      ;
      Global $hbmpscreen              ;
      Global $i=  1043                      ;moves the rect
      Global $ii=    378                      ;moves the rect
      Global $x=1044                        ;inner rect offset
      Global $y=501                          ;inner rect offset
      Global $hbmprect                    ;image inside rect
      Global $hscreen                        ;image whole screen
                                         
      _GDIPlus_Startup()                    ;?
      ;display hotkeys on screen
      ToolTip("Press F1 to scan | Press ESC to Exit",0,0)
                                          ;infinite loop to keep prog running
      While 1
          Sleep(100)
      WEnd
      Func _scan()
      ;~ reads your screen area:
      _read()
      ;~ converts screen captured into bmp
      _convert()
      ;~ .  Loads converted bmp to be read
      _loadBMP()
      ;~ compares the bmp of your scanned screen to the actual screen that is being displayed
      _compare()
      EndFunc
                                          ;reads screen
      Func _read()
          $hscreen = _ScreenCapture_CaptureWnd("", WinGetHandle($win_title), $area_x, $area_y, $area_x + $area_w, $area_y + $area_h, $cursor)
      EndFunc
                                          ;converts screen into bmp
      Func _convert()
          _GDIPlus_BitmapCreateFromHBITMAP($hscreen)
      EndFunc
                                          ;loads converted screen
      Func _loadBMP()
      _GDIPlus_BitmapCreateFromFile($rect_file)
      EndFunc
                                          ;compares savedBMP to current screen
      Func _compare()
      ;If(                              below code                                     ) = (                   below code           ) Then
      If _GDIPlus_BitmapGetPixel($hbmpscreen, ($i + $x) - $area_x, ($ii + $y) - $area_y) = _GDIPlus_BitmapGetPixel($hbmprect, $x, $y) Then
      ;display message box titled found with a message of found
      MsgBox("","","found")
      ;if above is not correct then
      EndIf
      EndFunc
                                          ;exit func
      Func _exit()
          Exit
      EndFunc
    • GordonFreeman
      By GordonFreeman
      Hi, i searched some topics but cannot found a simple way to do that:
      #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> $Form1 = GUICreate("Form1", 615, 438, 192, 124) GUISetState(@SW_SHOW) ; I tried this but user reported that it work in 2006, not seems work actually $filemenu = GUICtrlCreateMenu ("&File") $fileitem = GUICtrlCreateMenuitem ("Open",$filemenu) GuiCtrlSetImage($fileitem, "shell32.dll", 4) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Also tried:
      #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> $Form1 = GUICreate("Form1", 615, 438, 192, 124) GUISetState(@SW_SHOW) $filemenu = TrayCreateMenu("&File") $fileitem = TrayCreateItem("Open",$filemenu) ;GuiCtrlSetImage($fileitem, "shell32.dll", 4) ;GuiCtrlSetImage(TrayItemGetHandle($fileitem), "shell32.dll", 4) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Well.. thanks in advance!
       
      Ok. I found this working example from Yashied. If i cannot find a simple then i will go with it
      #Include <GUIConstantsEx.au3> #Include <GUIMenu.au3> #Include <Constants.au3> #Include <WinAPI.au3> #Include <WindowsConstants.au3> Opt('MustDeclareVars', 1) Global $hMenu, $hForm, $hFile = 1000, $idNew, $idExit $hForm = GUICreate('Menu', 400, 300) $hFile = _GUICtrlMenu_CreateMenu() _GUICtrlMenu_InsertMenuItem ($hFile, 0, ' &Favorites', $idNew) _GUICtrlMenu_InsertMenuItem ($hFile, 1, '', 0) _GUICtrlMenu_InsertMenuItem($hFile, 2, ' E&xit', $idExit) $hMenu = _GUICtrlMenu_CreateMenu() _GUICtrlMenu_InsertMenuItem($hMenu, 0, '&File', 0, $hFile) _GUICtrlMenu_SetMenu($hForm, $hMenu) _GUICtrlMenu_SetItemBmp($hFile, 0, _CreateBitmapFromIcon(_WinAPI_GetSysColor($COLOR_MENU), @SystemDir & '\shell32.dll', 43, 16, 16)) _GUICtrlMenu_SetItemBmp($hFile, 2, _CreateBitmapFromIcon(_WinAPI_GetSysColor($COLOR_MENU), @SystemDir & '\shell32.dll', 27, 16, 16)) GUISetState() Do Until GUIGetMsg() = $GUI_EVENT_CLOSE Func _CreateBitmapFromIcon($iBackground, $sIcon, $iIndex, $iWidth, $iHeight) Local $hDC, $hBackDC, $hBackSv, $hIcon, $hBitmap $hDC = _WinAPI_GetDC(0) $hBackDC = _WinAPI_CreateCompatibleDC($hDC) $hBitmap = _WinAPI_CreateSolidBitmap(0, $iBackground, $iWidth, $iHeight) $hBackSv = _WinAPI_SelectObject($hBackDC, $hBitmap) $hIcon = _WinAPI_PrivateExtractIcon($sIcon, $iIndex, $iWidth, $iHeight) If Not @error Then _WinAPI_DrawIconEx($hBackDC, 0, 0, $hIcon, 0, 0, 0, 0, $DI_NORMAL) _WinAPI_DestroyIcon($hIcon) EndIf _WinAPI_SelectObject($hBackDC, $hBackSv) _WinAPI_ReleaseDC(0, $hDC) _WinAPI_DeleteDC($hBackDC) Return $hBitmap EndFunc ;==>_CreateBitmapFromIcon Func _WinAPI_PrivateExtractIcon($sIcon, $iIndex, $iWidth, $iHeight) Local $hIcon, $tIcon = DllStructCreate('hwnd'), $tID = DllStructCreate('hwnd') Local $Ret = DllCall('user32.dll', 'int', 'PrivateExtractIcons', 'str', $sIcon, 'int', $iIndex, 'int', $iWidth, 'int', $iHeight, 'ptr', DllStructGetPtr($tIcon), 'ptr', DllStructGetPtr($tID), 'int', 1, 'int', 0) If (@error) Or ($Ret[0] = 0) Then Return SetError(1, 0, 0) EndIf $hIcon = DllStructGetData($tIcon, 1) If ($hIcon = Ptr(0)) Or (Not IsPtr($hIcon)) Then Return SetError(1, 0, 0) EndIf Return $hIcon EndFunc ;==>_WinAPI_PrivateExtractIcon Ok, i noticed that is a pain create submenu with _GUICtrlMenu_CreatePopup to do like in Tray, and Tray better located, then i need images/icon with Tray functions, some workaround?? 
    • SimTheNo1
      By SimTheNo1
      I am busy with building a solution for change monitoring of VOIP call program and to be properly automated means among others need for some limited OCR functionality. Current works of others are way too much overkill for this case what makes the need to build it myself. But to do it properly I significantly have to increase my knowledge about digital graphics management.
      For now I already have discovered here and there some mind blowing  Autoit miracles what can be achieved with Windows own possibilities to manipulate that what is output to the monitor. And as far I can judge there are 2 options to process graphics without use of any external libraries like ImageMagick, FreeImage and so on. These are:
       WinAPI  GDIPlus It is for me quite obvious to have various holes in general understanding of graphics and it is once more very clear what advantages gives consistent general study in 1 or another official institutions like University.  Cause there you are introduced into certain domain of knowledge in a way which usually has been perfected over long period of time. So you are not overloaded by stuff which requires a certain amount of information to be initially clear for you. For example, before starting to solve physics you first learn to read, count and so on and then move to subjects like physics.
      Though in my case opportunity to study in such educational system I had only for 8 years, from my 7th to 15th year of age in the country that was falling apart now Ukraine but used to be USSR, was all what it was. After have immigrated to Netherlands possibilities to study further haven't occur. And this therefor causes often various implications when going deep in that or another field of practical knowledge acquiring for any needed physical result, like programming to perform enormous amount of tasks. In this particular case automating VOIP call program.
      Anyway, right now I think the best direction to move is to concentrate on as basic as possible image management and if someone would maybe explain in general what is a pixel will definitely help. Particularly I am very curious about how to do picture manipulations in Autoit. Especially would help a lot to produce eventually following functions:
      createImage($imageFileName, $width, $height, $color) readImagePixel($imageFileName, $x, $y)  writeImagePixel($imageFileName, $x, $y) I do not know exactly how image is handled in computer but preferably above mentioned functions should deal with so far possible origin of graphics creation on computer. But nevertheless I definitely would love to hear any proposition for solution.
      The problem with explaining screenshots:
       VOIPConnect full Window  Part of Window with control to monitor for changes  Exact location of area where actual changes occur and have to be processed  It comes down to a rectangle of approximately 51 pixel wide and 7 pixel high. In fact if I get to learn as far as to be able exactly read, write and compare 2 images consistently across different computers I could narrow down then even further the area to watch as little as a square of 2-5 pixels wide. 
      To finish here is last detail about particularly no need for ultra fast solution at all. This because it is needed only once when it is first run on a new computer and to have to wait few minutes while it is being set instead of just a few seconds make no sence.
      This is it and what I too think to do beside this very particular case is to purify out beautiful generic Autoit functions for core image manipulation by using WinAPI or/and GDIPlus. 
    • Ian_Mac
      By Ian_Mac
      Func dg_get_images() $x1=0 $y1=0 ;MsgBox(0,"start","start") do $result = _ImageSearch("C:\Users\Server\Desktop\my project\image.png",1,$x1,$y1,0) until $result = 1; if $result=1 Then MouseMove($x1,$y1,3) MouseClick("left", $x1,$y1, 1) WinWait("[Title:TightVNC File Transfer]", "", 10) EndIf  this code works when i search the image, but when i change the location of the desktop icon it can't find the desktop icon anymore.   i wanna try image search area. but i don't know how to use it because i cant understand the parameter for the image search area.  please help me how to solve it thank you in advance.
    • Imperial
      By Imperial
      How to check If we pressed with Left mouse button on the Picture Control that was Created using the GUICtrlCreatePic Function
      $Form = GUICreate("Form", 615, 437, 184, 123, BitOR($WS_MINIMIZEBOX,$WS_POPUP,$WS_GROUP)) $Pic1 = GUICtrlCreatePic("C:\pb_rUu4L_400x400.jpg", 144, 56, 337, 209) GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() EndSwitch WEnd