parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

GIF/PNG watermark fix

G_Z 07.03.2008 03:15 / 05.08.2008 06:42

@_exec[sAction;hParams][sTempFileName;sDir;sClearDir;sTempFile;hTmp]
^if($hParams.sFormat ne "gif"){
	^hParams.delete[iColors]
}
$result[^switch[$sAction]{
	^case[info]{^file::exec[$sScript;;-info;$hParams.sInput]}
	^case[convert]{^file::exec[$sScript;;-o;$hParams.sOutput;^if(^hParams.bRemoveMeta.int(0)){-rmeta}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;^if($hParams.iColors){-colors}{-quiet};^if($hParams.iColors){$hParams.iColors}{^if(^hParams.bTrueColors.bool(false)){-truecolors}{-quiet}};$hParams.sInput]}
	^case[rotateJPG]{^file::exec[$sScript;;-jpegtrans;$hParams.sAngle;$hParams.sInput]}
	^case[rotate]{^file::exec[$sScript;;-o;$hParams.sOutput;-rotate;$hParams.iAngle;-bgcolor;$hParams.iR;$hParams.iG;$hParams.iB;^if($hParams.bRemoveMeta){-rmeta}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;^if($hParams.iColors){-colors}{-quiet};^if($hParams.iColors){$hParams.iColors}{-quiet};$hParams.sInput]}
	^case[crop]{^file::exec[$sScript;;-o;$hParams.sOutput;-crop;$hParams.iX;$hParams.iY;$hParams.iCropWidth;$hParams.iCropHeight;^if($hParams.bRemoveMeta){-rmeta}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;^if($hParams.iColors){-colors}{-quiet};^if($hParams.iColors){$hParams.iColors}{-quiet};$hParams.sInput]}
	^case[resize]{^file::exec[$sScript;;-o;$hParams.sOutput;-resize;$hParams.sWidth;$hParams.sHeight;^if($hParams.bKeepRatio){-ratio}{-quiet};^if(def $hParams.sFlag){-rflag}{-quiet};^if(def $hParams.sFlag){$hParams.sFlag}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;^if($hParams.iColors){-colors}{-quiet};^if($hParams.iColors){$hParams.iColors}{-quiet};^if($hParams.bRemoveMeta){-rmeta}{-quiet};-rtype;$hParams.sRType;$hParams.sInput]}
	^case[watermark]{
		^if($hParams.sFormat ne "gif" && $hParams.sFormat ne "png"){
			^file::exec[$sScript;;-o;$hParams.sOutput;-wmfile;$hParams.sWMFile;-wmpos;^hParams.iX.int(0);^hParams.iY.int(0);^if(def $hParams.sPosition){-wmflag}{-quiet};^if(def $hParams.sPosition){$hParams.sPosition}{-quiet};^if($hParams.bRemoveMeta){-rmeta}{-quiet};-out;$hParams.sFormat;-q;$hParams.iQuality;$hParams.sInput]
		}{
			$sTempFileName[^math:uid64[].bmp]
			$sTempFileName[^sTempFileName.lower[]]
			$sDir[^file:dirname[$hParams.sOutput]]
			$sClearDir[^sDir.mid(^self.sDocRoot.length[])]
			$sTempFile[$sDir/$sTempFileName]

			$hTmp[^self._exec[convert][
				$.sInput[$hParams.sInput]
				$.sOutput[$sTempFile]
				$.sFormat[bmp]
				$.bTrueColors(true)
				$.iQuality(100)
			]]

			$hTmp[^self._exec[watermark][
				$.sInput[$sTempFile]
				$.sOutput[$sTempFile]
				$.sFormat[bmp]
				$.sWMFile[$hParams.sWMFile]
				$.sPosition[$hParams.sPosition]
				$.iQuality(100)
			]]

			^self._exec[convert][
				$.sOutput[$hParams.sOutput]
				$.sInput[$sTempFile]
				$.sFormat[$hParams.sFormat]
				^if($hParams.sFormat ne "png"){$.iColors(^hParams.iColors.int(256))}
				$.iQuality(^hParams.iQuality.int(100))
			]

			^file:delete[$sClearDir/$sTempFileName]
		}
	}
	^case[DEFAULT]{^throw[$sClassName;;Action '$sAction' not implemented yet]}
}]
Как-то так.