Salvar JPG con mucho menos peso sin perder calidad

Iniciado por Fran1946, 8 Mayo 2015, 19:37 PM

0 Miembros y 4 Visitantes están viendo este tema.

Fran1946

Hola a todos:

SI, pero gracias a vuestra ayuda.

Gracias y un saludo.

okik



Me alegro que te hayas acabado el programa con éxito. Pero permíteme un apunte por si lees este comentario.

Respecto a "FindWindow" dices que: " Esto no funciona, no obtiene el handle, siempre  = 0, ya te dije que esta función falla mucho.
"

No falla, y si lo hace es por tres razones. La primera es que se trate de buscar el handle de la ventana antes que se haya abierto del todo. Es decir algunas ventanas tardan en cargarse y hay que esperar a que se cargen del todo, porque si no da 0. Esta es la razón que en el ejemplo lo pusiera dentro de un Do/Loop de este modo no falla porque el bucle no para de buscar la ventana hasta sea un valor distinto de 0. La segunda razón es que el nombre de clase utilizado sea incorrecto. Comprueba cual es en Windows 7, ya que yo no uso Windows 7 y puede que el que te dí no fuera el corrrecto. También al poner FindWindow ( "Nombredeclase", "TítuloVentana")  o bién FindWindow (vbnullstring, "TítuloVentana"),  el título de la ventana no sea el correcto. La tercera razón sería  que la ventana no esté abierta.




Fran1946

#22
Hola okik:

Si tienes razón, si esta dentro de un bucle Do/Loop, con un contador hasta 50000, como en tu ejemplo de código, si lo lee, pero yo utilizo el código de 'Arratrarventana', que me dio el otro usuario de otro foro que mencioné, y ese siempre lo consigue por que lo busca así:
Si hay titulo se intenta con el y FindWindow
Si no hay titulo tiene que haber exe
Si no se encuentra se intenta ejecutar
Y de esta forma siempre lo consigue, luego hace el proceso de Drag&Drop en memoria, esto es fundamental para mí, por que carga todos los JPG en el mismo SDPaint abierto con el primer JPG, y se ahorra tener que repetir el proceso de abrir SDPaint y leer el hWnd y esperar 2 segundos en cada archivo.

Mañana lo probaré en Win 7 x32 y x64, pero creo que funcionará bien, y con este código no necesito la clase del Paint de Win 7, por que con ese Paint no disminuye nada el peso, lo deja como está, por eso tengo que utilizar el Paint de XP.

Para XP, no necesitaría un Paint modificado con un editor hexadecimal, pero tengo amigos que les pasaré la aplicación, que tienen Win 7, S.O. que odio profundamente.

Ten en cuenta que yo he convertido carpetas enteras donde había 100 o 200 JPG's.

Un saludo.  

okik

#23
Bueno, cambiando de tema y centrándome en lo de convertir múltiples imagenes yo uso Xnview.

http://www.xnview.com/en/

Versión Standard (All languages)
http://download.xnview.com/XnView-win.zip

Verisón extendida (All languages)
http://download3.xnview.com/XnView-win-full.zip

(el idioma se cambia en menú -> Tools/Options/Interface)

Es gratis y fácil de usar. Verás un listado de de precios... pero fíjate en el mensaje "If you intend to use XnView in a company, you must purchase a license.", es decir que si es para uso empresarial hay que pagar, pero para uso privado es gratis.

Tiene su propio explorador, seleccionas las imágenes y del menú emergente seleccionas "Conversión por lotes". Una vez ahí, le das al botón opciones y eliges el método de compresión. Pero no olvides elegir el directorio donde irán las imágenes de lo contrario modificará las originales, de todos modos un mensaje te avisa de ello y puedes cancelar.  

Además puedes, también por lotes, cambiar; tamaño, brillo, contraste, efectos, etc. Soporta también algunos plugins de photoshop. En fin es completísimo, tiene infinidad de utilidades, es intuitivo y fácil de usar. Además pesa muy poco.

Lo tienes para Windows, MacOS y Linux.

Espero te sirva.

Saludos


Siempre Azul

Cita de: Fran1946 en 26 Mayo 2015, 14:28 PM
Hola a todos:

SI, pero gracias a vuestra ayuda.

Gracias y un saludo.
publica el codigo fuente que es lo que al final interesa, ya que programas para comprimir imagenes hay muchos.
Siempre Azul, Nunca Rojo.

Fran1946

#25
Hola okik:

Interesante programa, realmente es muy completo, y me puede ser útil para algunas cosas, aunque cuando quiero manipular imágenes utilizo Photoshop que evidentemente es lo más profesional que existe.

Pero para mi propósito que es simplemente conseguir el peso mínimo posible de un archivo JPG, conservando todas las propiedades del original, y me refiero a todas, EXIF, resolución en ppp, perfil de color, tamaño, etc, ninguno de los que he probado lo hacen es mas, hacen lo contrario, incluido este, aumentan el peso del archivo.

He probado con una imagen que el original pesa 1.4 Mb.
Con Xnview, aumenta el peso de 1.4 Mb a 1.94 Mb un 35 % mas.

Mira la captura.

Con mi sistema y Paint, disminuye de 1.4 Mb a 0.376 Mb, un 73,8 % menos.
La diferencia es abismal.

Evidentemente no puedo saber si existe algún programa, de los cientos que hay, que pudiera mejorar el resultado de Paint, pero no creo que exista ese programa.

Lo he repetido en este post varias veces, aunque no creo que nadie excepto Microsoft sepa por que ocurre "este milagro".

Pero muchas gracias otra vez por tu ayuda.

Un saludo.


sube fotos

okik

#26
Interesante!!

Bueno, yo he analizado el Paint y utiliza funciones GDI que se obtienen de GDI32.DLL para convertir imágenes. Además, yo si que creo que reduce algo la calidad, porque en la imagen convertida se aprecian píxels (cuadritos) que antes no aparecían.  Prueba a convertir una imagen con un gran cielo azul o algo así e imágenes que no sean de gran calidad, seguro que aprecias alguna imperfección que antes no estaba.

Te sugiero que si de verdad te interesa saber como lo hace, es que estudies las funciones GDI. Desgraciadamente, no se mucho del tema. Tengo alguna plantilla con ejemplos simples de uso del GDI, pero no para convertir imágenes. Tengo proyectos OCX, pero las funciones GDI se llaman desde módulos de clase que usan variables que están vinculadas a una determinada función, a otro módulo de clase que su vez a un módulo, lo cual resulta complejo de analizar.

A ver si puedes encontrar ejemplos sencillos o algún tutorial en la web, Por mi parte yo haré lo mismo.

:rolleyes:






Fran1946

CitarPrueba a convertir una imagen con un gran cielo azul o algo así e imágenes que no sean de gran calidad, seguro que aprecias alguna imperfección que antes no estaba.

Eso ya lo he hecho, y muchas mas pruebas con todo tipo de imágenes, y analizándolas luego en Photoshop, no hay pérdida perceptible al ojo humano, pero realmente es evidente que hay una pérdida respecto al original, pero el algoritmo de compresión, se basa principalmente en la poca sensibilidad del ojo humano a los cambios de color (crominancia), y a la alta sensibilidad a los cambios de brillo (luminancia) y así consigue comprimir mucho el factor crominancia, que es lo que mas información y peso en bytes consume.

Por que no te descargas el programa y haces pruebas con imágenes tuyas y lo ves por ti mismo.

Las imágenes de poca calidad y poco peso, no merece la pena convertirlas, aunque incluso imágenes que tengo de solo 12-15 Kb también disminuyen en peso un promedio del 15-30 %.

Realmente las funciones GDI, de momento no me interesan, por que el único propósito de esta aplicación es para reducir el tamaño que ocupan en el HD, cuando tienes cientos de imágenes como es mi caso.

Yo aparte de programación por hobby, hago mucho diseño gráfico, con Corel, Photoshop y 3Dmax, y en 3Dmax con muchas texturas el consumo de RAM se dispara, y si ahorras un 80 % en peso, ganas horas a la hora de renderizar.

Un saludo.

Neocortex

Buenas,

Yo recuerdo que para una clase hice un compresor de imagenes siguiendo más o menos la lógica de compresión del jpg, hay distintas compresiones, las que tienen pérdidas y las que no, para la 2da no importa cuantas veces lo guardes, va llegar a un tope y no se va comprimir más, lo que tu visualizaste con el mspaint fue que se "volvió" a comprimir con jpg a saber con que tasa de compresión...

Saludos

Fran1946

Hola:

CitarYo recuerdo que para una clase hice un compresor de imagenes siguiendo más o menos la lógica de compresión del jpg, hay distintas compresiones, las que tienen pérdidas y las que no, para la 2da no importa cuantas veces lo guardes, va llegar a un tope y no se va comprimir más,

Todo esto ya lo se desde hace muchos años.

Citarlo que tu visualizaste con el mspaint fue que se "volvió" a comprimir con jpg a saber con que tasa de compresión...

Pues claro, eso es el propósito para reducir el peso de los archivos y no se ni me importa la tasa de conversión que utiliza msPaint, solo me interesa el resultado que es el que ya he explicado muchas veces (conseguir reducir el peso de los archivos sin perder calidad ni resolución a efectos del ojo humano, incluso con Zoom elevados), pero creo que no has entendido lo que pretendía hacer y que ya lo he conseguido al 100% con la utilidad que he programado, lo he explicado 3 o 4 veces en este post.

Gracias por tu respuesta.

Saludos.