martes, 15 de noviembre de 2016

ASP Clásico: QR en PNG convertirlo en JPG

Obtener la imagen del QR de una url y convertirla de PNG a JPG

En asp clásico para obtener la imagen del QR de una url he hecho lo siguiente:

dim enlace : enlace = "http://vegamatrica.blogspot.com.es/"
'URL de creación del QR
dim url : url = "https://chart.googleapis.com/chart?chs=150x150&cht=qr&chl="&enlace&"&choe=UTF-8"


Indicar que a pesar de que la API de Google Charts está obsoleta, pensaba utilizarla. 
Ver: https://developers.google.com/chart/image/docs/making_charts

'DONDE:
'chs->tamaño del código QR (longitud x altura)
'cht->con su valor de argumento "qr" indica que el API Google Charts debe generar un código QR.
'chl->contiene la URL a la que se generará el QR.
'choe->(opcional) indica la codificación del código QR, por defecto UTF-8.


'ruta donde guardo la imagen del QR.
dim rutaGuardarQR : rutaGuardarQR = "C:\proyectos"

'Nombre de la imagen del QR que se guarda como PNG
dim nombreImagenQR : nombreImagenQR = "imagenQR.png"

call saveImageFromUrl(url, rutaGuardarQR, nombreImagenQR)

'La función saveImageFromUrl permite guardar la imagen del QR en la carpeta correspondiente. Convirtiendo la imagen de PNG a JPG


function saveImageFromUrl(strFileURL, imageLocation, image)

    server.scripttimeout = 60 * 20


    ' Fetch the file
    Dim objXMLHTTP : Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
    objXMLHTTP.open "GET", strFileURL, false
    objXMLHTTP.send()

    If objXMLHTTP.Status = 200 Then
        Dim objADOStream :  Set objADOStream = CreateObject("ADODB.Stream")
        objADOStream.Open
        objADOStream.Type = 1 'adTypeBinary
        objADOStream.Write objXMLHTTP.ResponseBody
        objADOStream.Position = 0 'Set the stream position to the start
   
   
        Dim objFSO : Set objFSO = Createobject("Scripting.FileSystemObject")
        If objFSO.Fileexists(imageLocation) Then objFSO.DeleteFile imageLocation
   
            Set objFSO = Nothing
            objADOStream.SaveToFile imageLocation & "/" & image
            objADOStream.Close
            Set objADOStream = Nothing


            'Convertir la imagen del QR PNG en JPG
            dim imageMagick: Set imageMagick = CreateObject("ImageMagickObject.MagickImage.1")
            dim imageConverted
            imageConverted = imageMagick.Convert(imageLocation & "/" image, imageLocation & "/" & "imagenQR.jpg")

        End if
    Set objXMLHTTP = Nothing
end function   


Al ejecutar la función "saveImageFromUrl" lanzó el siguiente error:

"El componente ActiveX no puede crear el objeto: 'ImageMagickObject.MagickImage.1'" a pesar de haberlo registrado con el siguiente comando:

 regsvr32 "C:\Archivos de programa\ImageMagick-6.2.3-Q8\ImageMagickObject.dll"

*Lo que se puede ver en la siguiente imagen de regsvr32.exe



Como necesito convertir la imagen del QR de PNG en JPG, y después de dedicarle un día en intentar solucionar ese problema y sin obtener soluciones, he decidido hacer la función en php y llamar a ese php desde el asp.

Para hacer la función en php utilicé el código de "PHP QR Code" http://phpqrcode.sourceforge.net por su facilidad de uso.

  1. Me descargué la biblioteca "phpqrcode"
  2.  En mi PHP:
include('../phpqrcode/qrlib.php');

$url = "http://vegamatrica.blogspot.com.es/"
$filePath = "C:\proyectos"

QRcode::png($url, $filePath); //$filePath ruta donde guardaré la imagen del QR en formato


if (!file_exists($filePath."\imagenQR.png")) {      
    QRcode::png($urlCompletaTurispain, $pngAbsoluteFilePath);
    $image = imagecreatefrompng($filePath."\imagenQR.png");
    imagejpeg($image, $filePath."\imagenQR.jpg", 70); 


     //convertimos la imagen png a jpg con calidad 70%   
    imagedestroy($image);

 
    //Borramos la imagen png       
    unlink($pngAbsoluteFilePath);
        

}else{
    echo "La ruta no existe";
}   

Y finalmente pude utilizarla en el ASP.




No hay comentarios:

Publicar un comentario