{"id":9125,"date":"2016-12-01T12:14:11","date_gmt":"2016-12-01T11:14:11","guid":{"rendered":"http:\/\/www.palentino.es\/blog\/?p=9125"},"modified":"2016-12-01T21:10:39","modified_gmt":"2016-12-01T20:10:39","slug":"automata-para-la-conversion-y-transformacion-de-imagenes-segun-patrones-de-microsoft-excel-eai","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/automata-para-la-conversion-y-transformacion-de-imagenes-segun-patrones-de-microsoft-excel-eai\/","title":{"rendered":"Aut\u00f3mata para la conversi\u00f3n y transformaci\u00f3n de im\u00e1genes seg\u00fan patrones de Microsoft Excel #EAI"},"content":{"rendered":"<p>Comenzamos este \u00faltimo mes del a\u00f1o con las pilas cargadas. En esta entrada os dejo una utilidad tambi\u00e9n bastante peculiar (vamos a lo que os intento tener acostumbrados) que permite realizar las siguientes tareas:<\/p>\n<p>El programa funciona a modo de <strong>aut\u00f3mata<\/strong> y consiste en seleccionar un directorio origen donde se encuentran <strong>im\u00e1genes<\/strong> de cualquier tama\u00f1o y formato, para una vez procesadas, dejarlas en un directorio destino con un nombre que corresponde con las reglas de un fichero en formato <strong>Excel<\/strong>.<\/p>\n<p>Admite el proceso por lotes, es <strong>personalizable<\/strong> en cuanto a las im\u00e1genes y<strong> marcas de agua (watermark)<\/strong> \u00a0que deseemos disponer. Una vez seleccionado el programa ir\u00e1 recorriendo cada fila (en funci\u00f3n de unos par\u00e1metros previamente establecidos) y asociando nombres en funci\u00f3n de los datos de la hoja de c\u00e1lculo.<\/p>\n<p>En la salida de las im\u00e1genes, \u00e9stas, son tratadas aplicando una marca de agua (si deseamos) y generando 2 im\u00e1genes, una de ellas en miniatura y la otra con el nombre destino seleccionado en la hoja de c\u00e1lculo.<\/p>\n<p><!--more--><\/p>\n<p><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Etapa-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9129\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Etapa-1.png\" alt=\"etapa-1\" width=\"735\" height=\"247\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Etapa-1.png 735w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Etapa-1-300x101.png 300w\" sizes=\"auto, (max-width: 735px) 100vw, 735px\" \/><\/a><\/p>\n<p>El esencia este proyecto muestra como conectarse usando 2\u00a0<strong>APIs<\/strong>.<\/p>\n<p>La primera de ellas permite comunicarse con cualquier versi\u00f3n de Excel. La segunda permite trabajar con im\u00e1genes usando la librer\u00eda freeimage360.dll y es de uso p\u00fablico. Est\u00e1 constituida por un conjunto de funciones de manipulaci\u00f3n de formatos gr\u00e1ficos. La DLL o biblioteca de enlace din\u00e1mico no requiere registro.<\/p>\n<p>Para usar el programa es necesario especificar un directorio origen (donde se encuentran las im\u00e1genes fuente) y un directorio destino (donde queremos dejarlas). En este directorio destino se crearan las im\u00e1genes reducidas y otras con marca de agua si as\u00ed se establece.<\/p>\n<p>El fichero Excel permite establecer una correlaci\u00f3n entre el nombre de la imagen origen y el nombre de la imagen destino. Las coordenadas que pueden ser alteradas muestran la posici\u00f3n donde se empieza a cotejar los datos, es decir, donde se encuentra el primer nombre de la imagen y como deseamos llamarla en el proceso de renombrado. Tambi\u00e9n dispone de un sistema de estad\u00edsticas, mostrando que im\u00e1genes a podido procesar y cuales no. Genera un fichero\u00a0de texto para poder almacenar los errores o no asociaciones. Por otro lado, genera un aviso sonoro una vez terminado el proceso.<\/p>\n<p><strong>FASES<\/strong><\/p>\n<p>Primero seleccionamos con los iconos fuente y destino las carpetas.<\/p>\n<p><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Etapa-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9130\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Etapa-2.png\" alt=\"etapa-2\" width=\"735\" height=\"247\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Etapa-2.png 735w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Etapa-2-300x101.png 300w\" sizes=\"auto, (max-width: 735px) 100vw, 735px\" \/><\/a><\/p>\n<p>Las opciones fila y columna las dejamos por defecto, puesto que encajan con el fichero Excel de ejemplo incorporado.<\/p>\n<p><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Mi_imagen_origen.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9137\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Mi_imagen_origen.png\" alt=\"mi_imagen_origen\" width=\"324\" height=\"453\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Mi_imagen_origen.png 324w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Mi_imagen_origen-215x300.png 215w\" sizes=\"auto, (max-width: 324px) 100vw, 324px\" \/><\/a><\/p>\n<p>La imagen superior muestra la imagen inicial a tratar.<\/p>\n<p><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Marca-de-agua-palentino.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9136\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Marca-de-agua-palentino.png\" alt=\"marca-de-agua-palentino\" width=\"676\" height=\"390\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Marca-de-agua-palentino.png 676w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Marca-de-agua-palentino-300x173.png 300w\" sizes=\"auto, (max-width: 676px) 100vw, 676px\" \/><\/a><\/p>\n<p>Mediante la marca de agua o watermark podemos personalizar la imagen salida. Como se muestra en la ilustraci\u00f3n superior.<\/p>\n<p>La imagen inferior muestra la estructura del fichero en formato excel. Podr\u00edamos tener mas filas, s\u00f3lo os dejo 2 a modo de ejemplo, una funciona, la otra genera un error para que ve\u00e1is como funciona:<\/p>\n<p><strong>Mi_imagen_origen<\/strong> corresponde con el nombre real de la imagen que se encuentra en la carpeta origen, la coordenada\u00a0A6 contiene el nombre por el que ser\u00e1 renombrado despu\u00e9s del tratamiento 1 (la extensi\u00f3n depende de nuestra configuraci\u00f3n). Se ha personalizado un salto de filas para procesar la siguiente y as\u00ed sucesivamente.<\/p>\n<p><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Excel-ejemplo.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9134\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Excel-ejemplo.png\" alt=\"excel-ejemplo\" width=\"838\" height=\"431\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Excel-ejemplo.png 838w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Excel-ejemplo-300x154.png 300w\" sizes=\"auto, (max-width: 838px) 100vw, 838px\" \/><\/a><\/p>\n<p>El proceso de salida muestra las estad\u00edsticas cuando el programa concluye.<\/p>\n<p><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Resumen-operaciones.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9138\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Resumen-operaciones.png\" alt=\"resumen-operaciones\" width=\"412\" height=\"355\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Resumen-operaciones.png 412w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Resumen-operaciones-300x258.png 300w\" sizes=\"auto, (max-width: 412px) 100vw, 412px\" \/><\/a><\/p>\n<p>Fichero de texto generado.<\/p>\n<p><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/log-de-errores.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9135\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/log-de-errores.png\" alt=\"log-de-errores\" width=\"629\" height=\"256\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/log-de-errores.png 629w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/log-de-errores-300x122.png 300w\" sizes=\"auto, (max-width: 629px) 100vw, 629px\" \/><\/a><\/p>\n<p>La imagen inferior muestra la conclusi\u00f3n del proceso.<\/p>\n<p><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Etapa-3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9131\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Etapa-3.png\" alt=\"etapa-3\" width=\"735\" height=\"247\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Etapa-3.png 735w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/Etapa-3-300x101.png 300w\" sizes=\"auto, (max-width: 735px) 100vw, 735px\" \/><\/a><\/p>\n<p>La imagen superior tambi\u00e9n muestra\u00a0el tiempo que ha transcurrido en el procesamiento, y el progreso. Podremos ver las im\u00e1genes generadas directamente pulsando el la carpeta <strong>ver<\/strong>.<\/p>\n<p>Puede llegar a procesar unas 1000 im\u00e1genes (depender\u00e1 del tama\u00f1o del fichero origen) en 10 minutos aproximadamente. Consejo, deja al ordenador respirar mientras trabaja :-), todav\u00eda no he optimizado el tema de los threads o hilos.<\/p>\n<p>En fin, no se si os ser\u00e1 de mucha utilidad, pero ah\u00ed os lo dejo. Necesito mejorar algunas cosas que todav\u00eda est\u00e1n pendientes (cuando disponga de m\u00e1s tiempo).<\/p>\n<p>Para descargar el programa pulsar sobre la<strong> imagen de descarga<\/strong>. He probado el programa en sistemas operativo Windows como XP, 7, 8 y 10.<\/p>\n<p><strong>En principio, Libre de virus, analizado con AVG, Avast, Malwarebytes.<br \/>\nAlgunas soluciones antivirus pueden dar falsas alarmas.<\/strong><br \/>\n<strong>Por otro lado, no me hago responsable del uso del software y de sus consecuencias derivadas. <\/strong><\/p>\n<p><strong>Estas condiciones se aceptan cuando descargo el programa.<\/strong><\/p>\n<h2><strong>Otras observaciones<\/strong><\/h2>\n<p><a href=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/EAI-winrar.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9128\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/EAI-winrar.png\" alt=\"eai-winrar\" width=\"401\" height=\"403\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/EAI-winrar.png 401w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/EAI-winrar-150x150.png 150w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2016\/12\/EAI-winrar-300x300.png 300w\" sizes=\"auto, (max-width: 401px) 100vw, 401px\" \/><\/a><\/p>\n<p>El programa <strong>no requiere instalaci\u00f3n<\/strong>. Es un fichero en formato comprimido Winrar, donde se encuentra un ejecutable <strong>EXCEL-A-IMAGEN.exe<\/strong> , carpetas de ejemplo origen y destino. Es decir, donde tenemos las im\u00e1genes (incluyo una de ejemplo) y donde queremos que las deje. La carpeta n\u00fameros contiene im\u00e1genes, PSDs y JPG personalizables por nosotros. Incluye la librer\u00eda <strong>FreeImage.dll<\/strong> y el <strong>PDF<\/strong> para mostrarnos todas las funciones que dispone para trabajar con ella a modo did\u00e1ctico.<\/p>\n<p>Requiere que el fichero Excel, se encuentra en formato xls.<\/p>\n<p><a href=\"http:\/\/www.palentino.es\/software\/EXCEL-A-IMAGEN.rar\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2874\" src=\"http:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2012\/12\/Descarga.png\" alt=\"Descarga\" width=\"300\" height=\"100\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Adjuntos &#8211;<\/p>\n<p>Ejemplo c\u00f3digo bot\u00f3n procesar:<\/p>\n<pre class=\"lang:vb decode:true \">'El bot\u00f3n procesar es el mas complejo, muestro parte del c\u00f3digo.\r\n\r\nDim nodo As Node\r\n\r\nAjustecmd.Visible = False\r\n\r\nUnload frmOptions\r\n\r\nfrmOptions.Hide\r\nSet nodo = frmOptions.miarbol.Nodes.Add()\r\nnodo.Text = \"-&gt; Imagenes asociadas\"\r\nSet nodo = frmOptions.miarbol.Nodes.Add()\r\nnodo.Text = \"-&gt; No asociadas\"\r\n\r\n'Empecemos con el procedimiento de renombrado\r\nOn Error Resume Next\r\n  Dim imagen_origen, imagen_destino, bOK As Long\r\n\r\nprocesar.Visible = True\r\nprocesar.Caption = \"Procesando ...\"\r\nvisor.Visible = True\r\n\r\nDim vfuente, vdestino, varchivo, Vco, Vcd As String\r\nDim vfo, vfd, vdesplazamiento As Integer\r\n\r\nVco = CStr(CO.Text)\r\nVcd = CStr(CD.Text)\r\nvfo = CInt(FO.Text)\r\nvfd = CInt(FD.Text)\r\nvdesplazamiento = CInt(desplazamiento.Text)\r\n\r\nvfuente = CStr(fuente.Caption)\r\nvagua = CStr(lagua.Caption)\r\nvagua2 = CStr(lagua.Caption)\r\n\r\n Set fso = New Scripting.FileSystemObject\r\n   bytescarpeta = fso.GetFolder(vfuente).Size\r\n Set fso = Nothing\r\n\r\nIf bytescarpeta &lt;= 50 Then\r\n   \r\n    MsgBox \"No existen archivos en la carpeta fuente especificada, incluya los JPGs\", vbCritical\r\n    \r\n End If\r\n \r\n \r\nvdestino = CStr(destino.Caption)\r\nvarchivo = CStr(Ficheroexcel.Caption)\r\nIf vfuente = \"ruta de im\u00e1genes fuente\" Or vdestino = \"ruta de im\u00e1genes fuente destino\" Or varchivo = \"Archivo de excel no seleccionado\" Or Vco = \"\" Or Vcd = \"\" Then\r\n    MsgBox \"Es necesario especificar la fuente, el destino y el archivo XLS\", vbCritical, \"Error de archivos\"\r\n    procesar.Visible = False\r\n    \r\nElse\r\n'On Error GoTo errores\r\n' En caso de estar todo correcto\r\n' Empezamos con la creaci\u00f3n del objeto excel\r\nDim appExcel As Excel.Application\r\nDim Salida As String\r\nDim nodosecundario As Variant\r\n\r\n\r\n\r\n\r\nSet appExcel = CreateObject(\"Excel.Application.9\")\r\nappExcel.Quit\r\n\r\n\r\nSalida = \"NO\"\r\n'varchivo = Replace(varchivo, \"\\\", \"\\\\\")\r\n\r\nappExcel.Workbooks.Open varchivo\r\ni = 0\r\nnumerodeimagenesaprocesar = 0\r\n\r\nSet fs = CreateObject(\"Scripting.filesystemobject\")\r\nSet a = fs.CreateTextFile(\"errores.txt\", True)\r\nSlider1.Visible = False\r\npmarcaagua.Checked = False\r\n\r\nDo\r\n\r\nrango_origen = Vco &amp; CStr((CInt(vfo) + i))\r\nrango_destino = Vcd &amp; CStr((CInt(vfd) + i))\r\ni = i + vdesplazamiento\r\nnumerodeimagenesaprocesar = numerodeimagenesaprocesar + 1\r\n\r\nLoop While CStr(appExcel.Range(rango_origen).Value) &lt;&gt; \"\" And CStr(appExcel.Range(rango_origen).Value) &lt;&gt; \"\"\r\n\r\n \r\n\r\nnumerodeimagenes = 1\r\ni = 0\r\nvisor.Visible = True\r\n contadortabla = 0\r\n Noprocesadas = 0\r\n \r\nprocesocancelado = \"NO\"\r\ndospuntos.Visible = True\r\nsegundos.Visible = True\r\nminutos.Visible = True\r\nsegundos.Caption = \"0\"\r\nminutos.Caption = \"0\"\r\n\r\n' Empecemos con el buque\r\nDo\r\nForm1.Command1.Visible = False\r\ncancelar.Visible = True\r\n\r\nProgressBar1.Min = 1\r\nProgressBar1.Max = (CInt(ProgressBar1.Width) * numerodeimagenes) \/ numerodeimagenesaprocesar\r\nProgressBar1.Value = 1\r\n\r\nDoEvents\r\n    If CInt(ProgressBar1.Value) &lt; 11055 Or numerodeimagenes &gt; 1 Then\r\n    ProgressBar1.Value = (CInt(ProgressBar1.Max) * numerodeimagenes) \/ numerodeimagenesaprocesar\r\n    numerodeimagenes = numerodeimagenes + 1\r\n   End If\r\n   \r\n   DoEvents\r\n   \r\n    \r\n   contadortabla = contadortabla + 1\r\n    'appExcel.Range(Vco + vfo).Select\r\n    rango_origen = Vco &amp; CStr((CInt(vfo) + i))\r\n    rango_destino = Vcd &amp; CStr((CInt(vfd) + i))\r\n    If CStr(appExcel.Range(rango_origen).Value) &lt;&gt; \"\" Or CStr(appExcel.Range(rango_destino).Value) &lt;&gt; \"\" Then\r\n   \r\n    \r\n    contenido_origen = \"\\\" &amp; CStr(appExcel.Range(rango_origen).Value &amp; Extension)\r\n    contenido_destino = \"\\\" &amp; CStr(appExcel.Range(rango_destino).Value &amp; \".jpg\")\r\n    marcaagua = \\\\agua.jpg\r\n \r\n\r\n    \r\n    contenido_completo_origen = vfuente &amp; contenido_origen\r\n    contenido_completo_destino = vdestino &amp; contenido_destino\r\n    contenido_completo_origen = Replace(contenido_completo_origen, \"\\\", \"\\\\\")\r\n    contenido_completo_destino = Replace(contenido_completo_destino, \"\\\", \"\\\\\")\r\n    \r\n    diragua = Replace(vagua, \"\\\", \"\\\\\")\r\n    diragua2 = Replace(vagua, \"\\\", \"\\\\\") &amp; \"\\\\marca.png\"\r\n    marcaaguac = Replace(vagua, \"\\\", \"\\\\\") &amp; marcaagua\r\n    \r\n    'Preparamos las estadisticas\r\n    Set nodo = frmOptions.miarbol.Nodes.Add(1, tvwChild)\r\n    If CStr(appExcel.Range(rango_origen).Value) &lt;&gt; \"\" Then\r\n         'Comprobamos si existe el chino\r\n         \r\n          If Dir(contenido_completo_origen) = \"\" Then\r\n             \r\n             Set nodo = frmOptions.miarbol.Nodes.Add(2, tvwChild)\r\n                 nodo.ForeColor = 255\r\n                    nodo.Tag = \"No procesado\"\r\n                        Noprocesadas = Noprocesadas + 1\r\n     nodo.Text = CStr(contadortabla) &amp; \" - C.O: \" &amp; rango_origen &amp; \" valor: \" &amp; CStr(appExcel.Range(rango_origen).Value &amp; Extension) &amp; \" || C.D.: \" &amp; rango_destino &amp; \" : \" &amp; \" valor: \" &amp; CStr(appExcel.Range(rango_destino).Value &amp; \".jpg\")\r\n    nodo.Key = CInt(contadortabla) &amp; \" ID\"\r\n             a.WriteLine nodo.Text\r\n             \r\n             \r\n             End If\r\n             \r\n          Set fso = Nothing\r\n \r\n    nodo.ForeColor = 0\r\n    nodo.Tag = \"procesado\"\r\n    nodo.Text = CStr(contadortabla) &amp; \" - C.O: \" &amp; rango_origen &amp; \" valor: \" &amp; CStr(appExcel.Range(rango_origen).Value &amp; Extension) &amp; \" || C.D.: \" &amp; rango_destino &amp; \" : \" &amp; \" valor: \" &amp; CStr(appExcel.Range(rango_destino).Value &amp; \".jpg\")\r\n    nodo.Key = CInt(contadortabla) &amp; \" ID\"\r\n    nodosecundario = nodo.Index\r\n    \r\n    \r\n    Else\r\n \r\n\r\n    Set nodo = frmOptions.miarbol.Nodes.Add(2, tvwChild)\r\n    nodo.ForeColor = 255\r\n    nodo.Tag = \"No procesado\"\r\n    Noprocesadas = Noprocesadas + 1\r\n    nodo.Text = CStr(contadortabla) &amp; \" - C.O: \" &amp; rango_origen &amp; \" valor: \" &amp; CStr(appExcel.Range(rango_origen).Value &amp; Extension) &amp; \" || C.D.: \" &amp; rango_destino &amp; \" : \" &amp; \" valor: \" &amp; CStr(appExcel.Range(rango_destino).Value &amp; \".jpg\")\r\n    nodo.Key = CInt(contadortabla) &amp; \" ID\"\r\n        a.WriteLine nodo.Text\r\n    End If\r\n    \r\n\r\n    'Proceso de copia de la imagen fuente al destino con formato, compresi\u00f3n y resoluci\u00f3n determinados.\r\n        \r\n    'Cargamos la imagen origen\r\n  \r\n     If Extension = \".JPG\" Then\r\n     imagen_origen = FreeImage_Load(FIF_JPEG, contenido_completo_origen, 0)\r\n     formatito = FIF_JPEG\r\n     Else\r\n     imagen_origen = FreeImage_Load(FIF_TIFF, contenido_completo_origen, 0)\r\n     formatito = FIF_TIFF\r\n     End If\r\n     \r\n     'MsgBox contenido_completo_origen\r\n     \r\n     If (FreeImage_Load(formatito, contenido_completo_origen, 0)) Then\r\n      visor.Caption = \"Leyendo imagen: \" &amp; contenido_origen\r\n           \r\n                DoEvents\r\n           \r\n \r\n           'imagen_destino = FreeImage_Save(FIF_JPEG, imagen_origen, contenido_completo_destino, 0)\r\n                \r\n         If CStr(appExcel.Range(rango_origen).Value) &lt;&gt; \"\" And CStr(appExcel.Range(rango_destino).Value) &lt;&gt; \"\" Then\r\n          \r\n                    cestadisticas.Visible = True\r\n                    \r\n       \r\n \r\n    ' Nos encargamos de dar calidad a la imagen\r\n                If Calidadmedia.Checked = True Then\r\n                    calidadimagen = JPEG_QUALITYNORMAL\r\n                End If\r\n                If calidadAlta.Checked = True Then\r\n                    calidadimagen = JPEG_QUALITYSUPERB\r\n                End If\r\n                If CalidadBaja.Checked = True Then\r\n                    calidadimagen = JPEG_QUALITYAVERAGE\r\n                End If\r\n                 If Calidadmuybaja.Checked = True Then\r\n                    calidadimagen = JPEG_QUALITYBAD\r\n                End If\r\n                \r\n            'Nos encargamos de miniaturizar\r\n            \r\n            'x = FreeImage_GetDotsPerMeterX(imagen_origen)\r\n             X = FreeImage_GetWidth(imagen_origen)\r\n             Y = FreeImage_GetHeight(imagen_origen)\r\n             \r\n             If (csne2.Checked) Then\r\n               \r\n               DimensionX = dimensiongrande\r\n               dimensionXpeque = dimensionpequena\r\n               DimensionY = Y * dimensiongrande \/ X\r\n               dimensionYpeque = Y * dimensionpequena \/ X\r\n               \r\n               \r\n             \r\n             End If\r\n             If (csne1.Checked) Then\r\n                'dimensionX\r\n                'dimensionY\r\n             End If\r\n\r\n'Fin del ejemplo\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comenzamos este \u00faltimo mes del a\u00f1o con las pilas cargadas. En esta entrada os dejo una utilidad tambi\u00e9n bastante peculiar (vamos a lo que os intento tener acostumbrados) que permite realizar las siguientes tareas: El programa funciona a modo de aut\u00f3mata y consiste en seleccionar un directorio origen donde se encuentran im\u00e1genes de cualquier tama\u00f1o y formato, para una vez procesadas, dejarlas en un directorio destino con un nombre que corresponde con las reglas de un fichero en formato Excel. Admite el proceso por lotes, es personalizable en cuanto a las im\u00e1genes y marcas de agua (watermark) \u00a0que deseemos disponer. Una vez seleccionado el programa ir\u00e1 recorriendo cada fila (en funci\u00f3n de unos par\u00e1metros previamente establecidos) y asociando nombres en funci\u00f3n de los datos de la hoja de c\u00e1lculo. En la salida de las im\u00e1genes, \u00e9stas, son tratadas aplicando una marca de agua (si deseamos) y generando 2 im\u00e1genes, una de ellas en miniatura y la otra con el nombre destino seleccionado en la hoja de c\u00e1lculo.<\/p>\n","protected":false},"author":1,"featured_media":9147,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1415],"tags":[],"class_list":["post-9125","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categoria-es"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/9125","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=9125"}],"version-history":[{"count":17,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/9125\/revisions"}],"predecessor-version":[{"id":9156,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/9125\/revisions\/9156"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/9147"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=9125"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=9125"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=9125"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}