Доброго времени суток камрады.
Вообщем требовалось как то упростить жизнь логистам в торговой компании, а именно при приемки товара грузчики всегда делали фото отчеты, потом эти отчеты отсылались компаниям поставщикам, соответственно у некоторых поставщиков были до кучи еще ограничения на почтовых серверах до 2Мб одно сообщение. Ну отчеты могли доходить до 300Мб, особо не на отсылаешь писем с ограничением в 2Мб.
Так вот, увидев это безобразие как они мучились в office picture manager решил им помочь.
И была написана эта утилита, с максимальным упрощенным интерфейсом и максимально быстрым сжатием изображения, до кучи еще есть вставка Copiright.
Может быть кому и пригодиться, пользуйтесь на здоровье.
Кстати будет и немного доработанная версия, с возможностью добавления файлов в архив rar или zip
Вообщем требовалось как то упростить жизнь логистам в торговой компании, а именно при приемки товара грузчики всегда делали фото отчеты, потом эти отчеты отсылались компаниям поставщикам, соответственно у некоторых поставщиков были до кучи еще ограничения на почтовых серверах до 2Мб одно сообщение. Ну отчеты могли доходить до 300Мб, особо не на отсылаешь писем с ограничением в 2Мб.
Так вот, увидев это безобразие как они мучились в office picture manager решил им помочь.
И была написана эта утилита, с максимальным упрощенным интерфейсом и максимально быстрым сжатием изображения, до кучи еще есть вставка Copiright.
Может быть кому и пригодиться, пользуйтесь на здоровье.
Кстати будет и немного доработанная версия, с возможностью добавления файлов в архив rar или zip
Код:
#Include <File.au3>
#Include <Array.au3>
#include <GDIPlus.au3>
HotKeySet("{ESC}", "Terminate")
;Выбираем папки где хранятся файлы jpg и куда будем их сохранять
;Важно чтобы папки имели разные пути или разные имена
$Files_Path = FileSelectFolder("Укажите папку с файлами JPG",@DesktopDir) ;где хранятся оригинальные файлы
$Files_Result_Path = FileSelectFolder("Укажите папку для сохранения сжатых файлов",@DesktopDir) ;куда будем сохранять результат после сжатия файлов
If $Files_Result_Path = $Files_Path Then
MsgBox(0,"Ошибочка","Невозможно сохранить файлы в одну и ту же папку с исходниками," & @CRLF & "Пожалуйста, выберите другую папку")
Sleep(500)
_Error()
EndIf
$Files_Mask="*.jpg"
Global $FileList=_FileListToArray($Files_Path,$Files_Mask,1)
$Nmbr_Files=$FileList[0]
_ArrayDelete($FileList,0)
$handled_files=0
ProgressOn("Мега прога", "Процесс сжатия изображений", "")
For $File in $FileList
If Compress_Jpg_Img_And_Add_Text($Files_Path&"\"&$File,$Files_Result_Path&"\"&$File,30,"Copyright ") Then ;тут можно подставить свой копирайт будет отображаться в верхнем левом углу
$handled_files+=1
ConsoleWrite("file "&$Files_Path&$File&" handled "&Int(100*$handled_files/$Nmbr_Files)&"%"&@CRLF)
Else
ConsoleWrite("file "&$Files_Path&$File&" handled failure"&@CRLF)
EndIf
ProgressSet(100*$handled_files/$Nmbr_Files, 100*$handled_files/$Nmbr_Files & " % " & "Имя файла: " &$File &@CRLF &"Всего файлов в папке: "& $Nmbr_Files)
Next
ProgressSet(100 , "Все файлы сжаты", "Процесс выполнен на: "&100*$handled_files/$Nmbr_Files &"%")
sleep(5000)
ProgressOff()
Func Compress_Jpg_Img_And_Add_Text($sPath_To_Source_Jpg_File,$sPath_To_Result_Jpg_File,$iQuality=100,$sText="hello world",$xColor = 0xFFFFFFFF)
$iFontSize = 42 ;размер шрифта
$iFontStyle = 3 ;стиль
_GDIPlus_Startup()
$hFamily = _GDIPlus_FontFamilyCreate('Arial') ;Выбираем шрифт которым будет делать надпись
$hFont = _GDIPlus_FontCreate($hFamily, $iFontSize, $iFontStyle)
$hFormat = _GDIPlus_StringFormatCreate()
$hImage = _GDIPlus_ImageLoadFromFile($sPath_To_Source_Jpg_File)
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
$iLeft = 5 ;отступ от левого края
$iTop = _GDIPlus_ImageGetHeight($hImage)/100
$tLayout = _GDIPlus_RectFCreate($iLeft, $iTop)
$hBrush = _GDIPlus_BrushCreateSolid($xColor)
$aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $sText, $hFont, $tLayout, $hFormat)
_GDIPlus_GraphicsDrawStringEx($hGraphic, $sText, $hFont, $aInfo[0], $hFormat, $hBrush)
$sCLSID = _GDIPlus_EncodersGetCLSID ("JPG")
$tParams = _GDIPlus_ParamInit (1)
$tData = DllStructCreate("int Quality")
DllStructSetData($tData, "Quality", $iQuality)
$pData = DllStructGetPtr($tData)
_GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData)
$pParams = DllStructGetPtr($tParams)
$ret=_GDIPlus_ImageSaveToFileEx ($hImage, $sPath_To_Result_Jpg_File, $sCLSID, $pParams)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage )
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_Shutdown()
Return $ret
EndFunc
Func _Error()
$Files_Result_Path = FileSelectFolder("Укажите папку для сохранения сжатых файлов",@DesktopDir) ;куда будем сохранять результат после сжатия файлов
Return $Files_Result_Path
EndFunc
Func Terminate()
Exit 0
EndFunc