Guten Abend,
ich bin gerade am versuchen ein PNG Bild in ein PDF einzufügen, was auch ohne Probleme funktioniert. Dafür verwende ich die MPDF_UDF in der Version 103 (laut Ordnername)
Mein Problem ist, dass die Bilder immer einen weißen Hintergrund haben, weil in der UDF die Datein in ein jpg umgewandelt werden. Und damit alle Tranzparenten pixel in weiße umgewandelt werden.
Ich hab schon selbst versucht die UDF umzuschreiben, aber jetzt werden die Bilder nicht angezeigt. Hier ist der geänderte Code-teil:
Func _LoadResImage($sImgAlias, $sImage)
Local $iW, $iH, $ImgBuf, $hImage, $hImageExt, $newImg, $hClone, $hGraphics, $iObj
If $sImgAlias = "" Then __Error("You don't have an alias for the image", @ScriptLineNumber)
If $sImage = "" Then
__Error("You don't have any images to insert or the path is invalid",@ScriptLineNumber)
Else
$hImageExt = StringUpper(StringRight($sImage, 3))
Switch $hImageExt
Case "BMP", "GIF", "TIF", "TIFF", "JPG", "JPEG", "ICO";, "PNG"
$newImg = _TempFile(@ScriptDir, "~", ".jpg")
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($sImage)
$iW = _GDIPlus_ImageGetWidth($hImage)
$iH = _GDIPlus_ImageGetHeight($hImage)
$hClone = _GDIPlus_BitmapCloneArea($hImage, 0, 0, $iW, $iH, $GDIP_PXF24RGB)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($hClone)
_GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)
_GDIPlus_GraphicsClear($hGraphics, 0xFFFFFFFF)
_GDIPlus_GraphicsDrawImage($hGraphics, $hImage, 0, 0)
_GDIPlus_ImageSaveToFile($hClone, $newImg)
$ImgBuf = __ToBinary($newImg)
$_iImageW = $iW
$_iImageH = $iH
$iObj = __InitObj()
__ToBuffer("<</Type /XObject /Subtype /Image /Name /" & $sImgAlias & " /Width " & $_iImageW & " /Height " & $_iImageH & " /Filter /DCTDecode /ColorSpace /DeviceRGB /BitsPerComponent 8" & " /Length " & $iObj + 1 & " 0 R" & ">>")
__ToBuffer("stream" & @CRLF & $ImgBuf & @CRLF & "endstream")
__EndObj()
$_Image &= "/" & $sImgAlias & " " & $iObj & " 0 R " & @CRLF
__InitObj()
__ToBuffer(StringLen($ImgBuf))
__EndObj()
_GDIPlus_ImageDispose($hImage)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_BitmapDispose($hClone)
_GDIPlus_Shutdown()
FileDelete($newImg)
Case "PNG"
$newImg = _TempFile(@ScriptDir, "~", ".png")
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($sImage)
$iW = _GDIPlus_ImageGetWidth($hImage)
$iH = _GDIPlus_ImageGetHeight($hImage)
$hClone = _GDIPlus_BitmapCloneArea($hImage, 0, 0, $iW, $iH, $GDIP_PXF32ARGB)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($hClone)
_GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)
_GDIPlus_GraphicsClear($hGraphics, 0x00FFFFFF)
_GDIPlus_GraphicsDrawImage($hGraphics, $hImage, 0, 0)
_GDIPlus_ImageSaveToFile($hClone, $newImg)
$ImgBuf = __ToBinary($newImg)
$_iImageW = $iW
$_iImageH = $iH
$iObj = __InitObj()
__ToBuffer("<</Type /XObject /Subtype /Image /Name /" & $sImgAlias & " /Width " & $_iImageW & " /Height " & $_iImageH & " /Filter /FlateDecode /ColorSpace /DeviceRGB /BitsPerComponent 8" & " /Length " & $iObj + 1 & " 0 R" & ">>")
__ToBuffer("stream" & @CRLF & $ImgBuf & @CRLF & "endstream")
__EndObj()
$_Image &= "/" & $sImgAlias & " " & $iObj & " 0 R " & @CRLF
__InitObj()
__ToBuffer(StringLen($ImgBuf))
__EndObj()
_GDIPlus_ImageDispose($hImage)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_BitmapDispose($hClone)
_GDIPlus_Shutdown()
FileDelete($newImg)
Case Else
__Error("The image is invalid",@ScriptLineNumber)
Exit
EndSwitch
EndIf
Return $_Image
EndFunc ;==>_LoadResImage
Alles anzeigen
im Anhang ist noch ein PDF mit dem das die UDF normalerweiße aus gibt.("mit_JPG_Umwandlung.pdf")
und das mit dem geändertem Code.("mit_PNG.pdf")
Kann mir jemand helfen entweder den Code richtig zu ändern, oder mir eine UDF zeigen die Bilder in welchem Format auch immer mit transparenz einfügen kann?
Vielen Dank schon mal
Flo