{"id":468,"date":"2009-11-03T15:15:27","date_gmt":"2009-11-03T18:15:27","guid":{"rendered":"http:\/\/leandroascierto.com\/blog\/?p=468"},"modified":"2011-08-27T08:20:33","modified_gmt":"2011-08-27T11:20:33","slug":"modulo-para-convertir-imagenes-de-un-formato-a-otro-gdi","status":"publish","type":"post","link":"https:\/\/leandroascierto.com\/blog\/modulo-para-convertir-imagenes-de-un-formato-a-otro-gdi\/","title":{"rendered":"M\u00f3dulo para convertir im\u00e1genes de un formato a otro (GDI+)"},"content":{"rendered":"<p style=\"text-align: justify;\">Este es un peque\u00f1o m\u00f3dulo para convertir archivos de im\u00e1genes de un formato a otro. Es muy sencillo de usar, s\u00f3lo basta con llamar a la funci\u00f3n ConvertFileImage, donde pasamos como primer par\u00e1metro el Path de la im\u00e1gen de origen y como segundo par\u00e1metro el Path de destino m\u00e1s el nombre y extensi\u00f3n. El tercer par\u00e1metro es opcional y es un valor de 0 a 100 en los caso que la extensi\u00f3n de destino sea .JPG, para elegir la calidad de conversi\u00f3n.<br \/>\nTambi\u00e9n cuenta con una funci\u00f3n llamada IsGdiPlusInstaled que es para averiguar si el PC que ejecute el programa tiene instalado GDI Plus.<br \/>\nNo tiene muchas opciones ya que el m\u00f3dulo intenta ser algo peque\u00f1o para pocas pretensiones.<br \/>\nLas extensiones de de lectura soportadas son: \u00abBMP, DIB, JPG, JPEG, JPE, JFIF, GIF, PNG, TIF, TIFF, EMF, WMF, ICO, CUR\u00bb.<br \/>\ny las extensiones de conversi\u00f3n soportadas son: \u00abBMP, DIB, JPG, JPEG, JPE, JFIF, GIF, PNG, TIF, TIFF\u00bb.<\/p>\n<p>* Edit 06\/02\/2010, correcci\u00f3n en el c\u00f3digo, me confund\u00ed en poner PGN, por PGN.<\/p>\n<p style=\"text-align: justify;\">\n<p style=\"text-align: justify;\">\n<pre class=\"brush: vb; title: ; notranslate\" title=\"\">\r\nOption Explicit\r\n'--------------------------------------------\r\n'Autor: Leandro Ascierto\r\n'Web: www.leandroascierto.com.ar\r\n'Date: 01\/11\/2009\r\n'--------------------------------------------\r\nPrivate Declare Function LoadLibrary Lib &quot;kernel32&quot; Alias &quot;LoadLibraryA&quot; (ByVal lpLibFileName As String) As Long\r\nPrivate Declare Function FreeLibrary Lib &quot;kernel32&quot; (ByVal hLibModule As Long) As Long\r\nPrivate Declare Function GetProcAddress Lib &quot;kernel32&quot; (ByVal hModule As Long, ByVal lpProcName As String) As Long\r\nPrivate Declare Function GdiplusStartup Lib &quot;gdiplus&quot; (Token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As Long\r\nPrivate Declare Function GdipLoadImageFromFile Lib &quot;GdiPlus.dll&quot; (ByVal mFilename As Long, ByRef mImage As Long) As Long\r\nPrivate Declare Function GdipDisposeImage Lib &quot;gdiplus&quot; (ByVal image As Long) As Long\r\nPrivate Declare Sub GdiplusShutdown Lib &quot;gdiplus&quot; (ByVal Token As Long)\r\nPrivate Declare Function GdipSaveImageToFile Lib &quot;gdiplus&quot; (ByVal image As Long, ByVal FileName As Long, ByRef clsidEncoder As GUID, ByRef encoderParams As Any) As Long\r\nPrivate Declare Function CLSIDFromString Lib &quot;ole32&quot; (ByVal str As Long, id As GUID) As Long\r\n \r\nPrivate Type GUID\r\n    Data1           As Long\r\n    Data2           As Integer\r\n    Data3           As Integer\r\n    Data4(0 To 7)   As Byte\r\nEnd Type\r\n \r\nPrivate Type EncoderParameter\r\n    GUID            As GUID\r\n    NumberOfValues  As Long\r\n    type            As Long\r\n    Value           As Long\r\nEnd Type\r\n \r\nPrivate Type EncoderParameters\r\n    Count           As Long\r\n    Parameter(15)   As EncoderParameter\r\nEnd Type\r\n \r\nPrivate Type GdiplusStartupInput\r\n    GdiplusVersion           As Long\r\n    DebugEventCallback       As Long\r\n    SuppressBackgroundThread As Long\r\n    SuppressExternalCodecs   As Long\r\nEnd Type \r\n \r\nConst ImageCodecBMP = &quot;{557CF400-1A04-11D3-9A73-0000F81EF32E}&quot;\r\nConst ImageCodecJPG = &quot;{557CF401-1A04-11D3-9A73-0000F81EF32E}&quot;\r\nConst ImageCodecGIF = &quot;{557CF402-1A04-11D3-9A73-0000F81EF32E}&quot;\r\nConst ImageCodecTIF = &quot;{557CF405-1A04-11D3-9A73-0000F81EF32E}&quot;\r\nConst ImageCodecPNG = &quot;{557CF406-1A04-11D3-9A73-0000F81EF32E}&quot;\r\n \r\nConst EncoderQuality = &quot;{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}&quot;\r\nConst EncoderCompression = &quot;{E09D739D-CCD4-44EE-8EBA-3FBF8BE4FC58}&quot;\r\n \r\nConst TiffCompressionNone = 6\r\nConst EncoderParameterValueTypeLong = 4\r\n \r\nPublic Function ConvertFileImage(ByVal SrcPath As String, ByVal DestPath As String, Optional ByVal JPG_Quality As Long = 85) As Boolean\r\n \r\n    On Error Resume Next\r\n    Dim GDIsi As GdiplusStartupInput, gToken As Long, hBitmap As Long\r\n    Dim tEncoder  As GUID\r\n    Dim tParams     As EncoderParameters\r\n    Dim sExt        As String\r\n    Dim lPos        As Long\r\n \r\n    DestPath = Trim(DestPath)\r\n \r\n    lPos = InStrRev(DestPath, &quot;.&quot;)\r\n    If lPos Then\r\n        sExt = UCase(Right(DestPath, Len(DestPath) - lPos))\r\n    End If\r\n \r\n    Select Case sExt\r\n        Case &quot;PNG&quot;\r\n            CLSIDFromString StrPtr(ImageCodecPNG), tEncoder \r\n        Case &quot;TIF&quot;, &quot;TIFF&quot;\r\n            CLSIDFromString StrPtr(ImageCodecTIF), tEncoder\r\n \r\n            With tParams\r\n                .Count = 1\r\n                .Parameter(0).NumberOfValues = 1\r\n                .Parameter(0).type = EncoderParameterValueTypeLong\r\n                .Parameter(0).Value = VarPtr(TiffCompressionNone)\r\n                CLSIDFromString StrPtr(EncoderCompression), .Parameter(0).GUID\r\n            End With\r\n \r\n        Case &quot;BMP&quot;, &quot;DIB&quot;\r\n            CLSIDFromString StrPtr(ImageCodecBMP), tEncoder\r\n \r\n        Case &quot;GIF&quot;\r\n            CLSIDFromString StrPtr(ImageCodecGIF), tEncoder\r\n \r\n        Case &quot;JPG&quot;, &quot;JPEG&quot;, &quot;JPE&quot;, &quot;JFIF&quot; \r\n            If JPG_Quality &gt; 100 Then JPG_Quality = 100\r\n            If JPG_Quality &lt; 0 Then JPG_Quality = 0\r\n \r\n            CLSIDFromString StrPtr(ImageCodecJPG), tEncoder\r\n \r\n            With tParams\r\n                .Count = 1\r\n                .Parameter(0).NumberOfValues = 1\r\n                .Parameter(0).type = EncoderParameterValueTypeLong\r\n                .Parameter(0).Value = VarPtr(JPG_Quality)\r\n                CLSIDFromString StrPtr(EncoderQuality), .Parameter(0).GUID\r\n            End With\r\n \r\n        Case Else\r\n            Exit Function\r\n \r\n    End Select\r\n \r\n    GDIsi.GdiplusVersion = 1&amp; \r\n    GdiplusStartup gToken, GDIsi\r\n \r\n    If gToken Then\r\n        If GdipLoadImageFromFile(StrPtr(SrcPath), hBitmap) = 0 Then \r\n            If GdipSaveImageToFile(hBitmap, StrPtr(DestPath), tEncoder,ByVal  tParams) = 0 Then\r\n                ConvertFileImage = True\r\n            End If \r\n            GdipDisposeImage hBitmap \r\n        End If \r\n        GdiplusShutdown gToken\r\n    End If\r\n \r\nEnd Function \r\n \r\nPublic Function IsGdiPlusInstaled() As Boolean\r\n    Dim hLib As Long\r\n \r\n    hLib = LoadLibrary(&quot;gdiplus.dll&quot;)\r\n    If hLib Then\r\n        If GetProcAddress(hLib, &quot;GdiplusStartup&quot;) Then\r\n            IsGdiPlusInstaled = True\r\n        End If\r\n        FreeLibrary hLib\r\n    End If\r\n \r\nEnd Function\r\n<\/pre>\n<p align=\"center\"><a href=\"https:\/\/leandroascierto.com\/blog\/descarga.php?url=Convertidor_de_Imagenes.zip\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" title=\"Descargar\" src=\"https:\/\/leandroascierto.com\/blog\/descarga.php?file=Convertidor_de_Imagenes.zip\" alt=\"\" width=\"280\" height=\"61\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este es un peque\u00f1o m\u00f3dulo para convertir archivos de im\u00e1genes de un formato a otro. Es muy sencillo de usar, s\u00f3lo basta con llamar a la funci\u00f3n ConvertFileImage, donde pasamos como primer par\u00e1metro el Path de la im\u00e1gen de origen y como segundo par\u00e1metro el Path de destino m\u00e1s el nombre y extensi\u00f3n. El tercer <a href='https:\/\/leandroascierto.com\/blog\/modulo-para-convertir-imagenes-de-un-formato-a-otro-gdi\/' class='excerpt-more'>[&#8230;]<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29],"tags":[60,35],"class_list":["post-468","post","type-post","status-publish","format-standard","hentry","category-modulos","tag-gdi-plus","tag-gdi","category-29-id","post-seq-1","post-parity-odd","meta-position-corners","fix"],"_links":{"self":[{"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/posts\/468","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/comments?post=468"}],"version-history":[{"count":2,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/posts\/468\/revisions"}],"predecessor-version":[{"id":505,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/posts\/468\/revisions\/505"}],"wp:attachment":[{"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/media?parent=468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/categories?post=468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/tags?post=468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}