elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Salvar JPG con mucho menos peso sin perder calidad
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 Ir Abajo Respuesta Imprimir
Autor Tema: Salvar JPG con mucho menos peso sin perder calidad  (Leído 17,629 veces)
Fran1946

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Salvar JPG con mucho menos peso sin perder calidad
« en: 8 Mayo 2015, 19:37 pm »

Hola a todos:

Os explico mi necesidad, y de paso esto os puede servir a muchos para diminuir mucho el peso de imágenes JPG hechas con cámaras digitales o móviles.

Por casualidad descubrí que abriendo una imagen JPG en msPaint de Windows XP, y sin hacer nada con ella, salvarla con Ctr+g o en el Menú...Archivo...Guardar, lógicamente con el mismo nombre, ahora esa imagen pesará entre el 30 al 85 % menos, un ejemplo real con una de mis imágenes hecha con una cámara Cannon EOS 600D:
Imagen original  pesa 8.89 Mb, la misma cargada en msPaint y salvada pesa 1.44 Mb, o sea 83,80 % menos.
Comparadas en el visor de imágenes de Windows, son exactamente iguales no hay perdida de resolución, no eres capaz de distinguirlas, y con Zoom en Photosop son exactamente iguales y la ficha EXIF también.

Si alguien lo duda que haga la prueba, y si alguien sabe por que ocurre esto que me lo explique.

Entonces he hecho una aplicación, donde hago un Drag & Drop de una carpeta donde haya imagenes JPG, o de varios archivos seleccionados de una carpeta, y solo los que sean JPG se cargan sus rutas completas en un ListBox, luego al pulsar un botón, se genera una carpeta donde se copian todos los JPG's originales de la lista.
Y a continuación se cargaran uno a uno en Paint, y se salvan mandando con SendKeys las pulsaciones Ctr+g, por que no he podido conseguir como mandarle el comando 'Guardar' a Paint desde vb6, si alguien sabe como hacerlo por favor explicármelo.

Pero necesito hacer esa misma aplicación para Windows 7, y el msPaint de Win7, utilizando el mismo 'truco' que el de XP, no reduce nada el peso, pero ejecutando una copia del msPaint de Win XP desde Win7, si funciona y lo hace igual que lo que he mencionado.

Entonces la idea es, tengo una copia de msPaint de Win XP, que se llama 'SDpaint.exe'   

Y la aplicación al ejecutarse, abre 'SDpaint.exe' con Shell:
 
Y lo que necesito, es que una vez 'SDpaint.exe' esta abierto, sin ninguna imagen, desde mi aplicación cargar una serie de imágenes.jpg una a una desde la lista de un ListBox (que tiene la ruta completa de la imagen), pero en el 'SDpaint.exe' abierto al principio, no me sirve cerrar 'SDpaint.exe' y cargar una imagen en un nuevo 'SDpaint.exe', cerrarlo y cargar la siguiente abriendo otro.

He probado capturando primero el hWnd del 'SDpaint.exe' abierto, en la variable LhWnd , para utilizarlo con ShellExecute así:
L = ShellExecute(LhWnd, "Open", ListFiles.List(i), "", "", 0)
Pero ejecuta el visor de imágenes de Windows, no carga la imagen en el Paint abierto, y creo que esto se debe poder hacer, no encuentro nada en Internet.

Agradecería cualquier ayuda, perdonad el tocho.

Un saludo.


En línea

luis_74

Desconectado Desconectado

Mensajes: 49


Ver Perfil
Re: Salvar JPG con mucho menos peso sin perder calidad
« Respuesta #1 en: 10 Mayo 2015, 01:14 am »



prueba ejecutando el programa y pasandole la ruta del archivo:

Código:

"c:\sdpaint.exe c:\imagen.jpg"



En línea

Fran1946

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Re: Salvar JPG con mucho menos peso sin perder calidad
« Respuesta #2 en: 11 Mayo 2015, 19:58 pm »

Gracias por tu interés, pero creo que no entiendo tu respuesta:

"c:\sdpaint.exe c:\imagen.jpg"
Eso no es código ejecutable, y si te refieres a:

Call Shell("c:\sdpaint.exe c:\imagen.jpg",1) eso tampoco es ejecutable.
En línea

luis_74

Desconectado Desconectado

Mensajes: 49


Ver Perfil
Re: Salvar JPG con mucho menos peso sin perder calidad
« Respuesta #3 en: 12 Mayo 2015, 05:04 am »

Gracias por tu interés, pero creo que no entiendo tu respuesta:

"c:\sdpaint.exe c:\imagen.jpg"
Eso no es código ejecutable, y si te refieres a:

Call Shell("c:\sdpaint.exe c:\imagen.jpg",1) eso tampoco es ejecutable.


sí ya veo que no anda, bueno cambialo a esto:

Código:

ShellExecute 0, "open", "c:\windows\system32\mspaint.exe", "c:\imagen.jpg", "", 1



cambiando las rutas del progrmas y la imagen  ya tienes abierta la imagen en el paint.

lo acabo de probar y si funciona.
En línea

Fran1946

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Re: Salvar JPG con mucho menos peso sin perder calidad
« Respuesta #4 en: 12 Mayo 2015, 13:09 pm »

ShellExecute 0, "open", "c:\windows\system32\mspaint.exe", "c:\imagen.jpg", "", 1

Claro, si llamas al msPaint y la imagen esta en C:\ si funciona, pero si la imagen esta en, por ejemplo, "T:\A\Nueva carpeta\imagen.jpg", entonces no funciona.

Pero creo que no has entendido mi pregunta:

Yo no tengo problema para abrir las imágenes en cualquier ruta y HD, con una copia de 'mspaint.exe', renombrada por mi como 'SDPaint.exe' ubicada en otra ruta diferente a "c:\windows\system32".

En Win XP, mi aplicación funciona 100%, utilizando "c:\windows\system32\mspaint.exe" , donde no funciona es en Win7, por que el mspaint de Win7 es diferente al de Win XP, digamos que es menos básico y tiene mas herramientas, pero al salvar las imágenes no las reduce de peso nada, que es el objetivo de mi aplicación.

Ya he conseguido también ajecutar 'SDPaint' al principio sin ninguna imagen, y luego cargar una a una todas la imágenes con sus rutas completas de la lista de un ListBox, lo único que no he conseguido es mandarle el comando Ctr+g, que es lo que salva la imagen cargada en 'SDPaint', por que haciendolo con:
SendKeys "^{g}", 3
No funciona, y creo que la única forma es hacerlo con SendMessage o con PostMessage, pero hay me pierdo.
En línea

okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: Salvar JPG con mucho menos peso sin perder calidad
« Respuesta #5 en: 12 Mayo 2015, 17:08 pm »

Hola  :D

En un Form crea un Botón (CommandButton)


Mete esto en un Módulo:

Código
  1. Option Explicit
  2. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
  3. (ByVal lpClassName As String, _
  4. ByVal lpWindowName As String) As Long
  5.  
  6. 'Funcición API para enviar un mensaje a MSPaint
  7. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
  8. (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  9. Const SC_CLOSE = &HF060&
  10. Const WM_COMMAND = &H111
  11. Const WM_SYSCOMMAND = &H112
  12.  
  13. 'Función API para obtener el nombre de un archivo a partir de un directorio
  14. Private Declare Function GetFileTitle Lib "comdlg32.dll" Alias "GetFileTitleA" _
  15. (ByVal lpszFile As String, _
  16. ByVal lpszTitle As String, _
  17. ByVal cbBuf As Integer) As Integer
  18.  
  19. 'Función para deternimnar si un proceso es una ventana
  20. Private Declare Function IsWindow Lib "user32" (ByVal hwnd As Long) As Long
  21. 'Función para obtener el nombre corto de un directorio
  22. Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" _
  23. (ByVal lpszLongPath As String, _
  24. ByVal lpszShortPath As String, _
  25. ByVal cchBuffer As Long) As Long
  26.  
  27.  
  28. Public Const MS_SAVE = 0
  29. Public Const MS_SAVE_AS = 1
  30. Dim hwMsPaint As Long 'para el Handle de MsPaint
  31.  
  32. Public Function GetDirCorto(strPath) As String
  33. Dim ShortName As String * 255
  34. Call GetShortPathName(strPath, ShortName, 255)
  35. GetDirCorto = Left$(ShortName, InStr(1, ShortName, Chr$(0)) - 1)
  36. End Function
  37.  
  38.  
  39. 'Inicia MsPaint en modo oculto
  40. Public Function StartMSPaint(ByVal PathMsPaint As String, ByVal strPathFile As String, ByVal Modo As Integer)
  41.    On Error GoTo Error_sub
  42.    Dim Count As Long
  43.    Dim objStartup      As Object
  44.    Dim objWMIService   As Object
  45.    Dim objConfig       As Object
  46.    Dim objProcess      As Object
  47.    Dim Error           As Integer
  48.    Dim strComputer     As String
  49.    Dim intProcessID    As Long
  50.    Dim Opcion          As Integer
  51.    Dim sFile           As String
  52.    Dim sDir            As String
  53.  
  54.    strComputer = "."
  55.    hwMsPaint = 0
  56.    Set objWMIService = GetObject("winmgmts:" _
  57.    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
  58.    Set objStartup = objWMIService.Get("Win32_ProcessStartup")
  59.    Set objConfig = objStartup.SpawnInstance_
  60.    objConfig.ShowWindow = 12 'Iniciar en modo oculto (usar 1 para modo visible)
  61.    Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
  62.  
  63.    sDir = GetDirCorto(strPathFile) 'Obtiene el directorio corto Ej.: "[Drive]:\Name~1.jpg"
  64.        'Si el archivo no existe...
  65.        If sDir = "" Then
  66.            MsgBox "No se encuentra " & strPathFile, vbCritical
  67.            Exit Function
  68.        End If
  69.  
  70.    Error = objProcess.Create(PathMsPaint & " " & sDir, Null, objConfig, intProcessID)
  71.        If Error Then
  72.            MsgBox "No se encuentra " & PathMsPaint & "." & vbCrLf & vbCrLf & _
  73.            "Compruebe que la aplicación existe o está correctamente escrito.", _
  74. vbCritical, "Error"
  75.            Exit Function
  76.        End If
  77.  
  78.    'On Local Error Resume Next
  79.    'Elimina las variables de objeto
  80.    Set objStartup = Nothing
  81.    Set objWMIService = Nothing
  82.    Set objConfig = Nothing
  83.    Set objProcess = Nothing
  84.  
  85.    'Obtiene el título del archivo a guardar
  86.    sFile = gFileTitle(strPathFile)
  87.  
  88.    'Obtiene el handle de MSPaint que ha abierto el archivo
  89.    Do While hwMsPaint = 0
  90.        Count = Count + 1
  91.        hwMsPaint = FindWindow("MSPaintApp", sFile & " - Paint")
  92.        DoEvents
  93.        If Count > 50000 Then Exit Function
  94.    Loop
  95.  
  96.    'No pasa hasta el siguiente comando hasta que MsPaint se haya abierto
  97.    Dim n&
  98.    Do While n& = 1
  99.        n& = IsWindow(hwMsPaint)
  100.        DoEvents
  101.    Loop
  102.  
  103.    'Envia el mensaje Guardar o Guardar como a MsPaint
  104.    Call MsPaintSave(Modo)
  105.  
  106.    Do While n& = 0
  107.    n& = IsWindow(hwMsPaint)
  108.    CloseMsPaint
  109.    DoEvents
  110.    Loop
  111.  
  112.    Exit Function
  113.  
  114. Error_sub:
  115.    MsgBox Err.Description, vbCritical
  116.  
  117.    On Local Error Resume Next
  118.    'Elimina las variables de objeto
  119.  
  120.    Set objStartup = Nothing
  121.    Set objWMIService = Nothing
  122.    Set objConfig = Nothing
  123.    Set objProcess = Nothing
  124. End Function
  125.  
  126. Private Sub MsPaintSave(ByVal Modo As Integer)
  127. Select Case Modo
  128. Dim X&
  129. Case 0
  130. X& = SendMessage(hwMsPaint, WM_COMMAND, 57603, &H0) 'Guardar
  131. Case 1
  132. X& = SendMessage(hwMsPaint, WM_COMMAND, 57604, &H0) 'Guardar como...
  133. End Select
  134.  
  135. End Sub
  136.  
  137. 'Cierra MsPaint
  138. Public Function CloseMsPaint()
  139. 'Envía el mensaje de Cerrar a MSPaint
  140. SendMessage hwMsPaint, WM_SYSCOMMAND, SC_CLOSE, &H0
  141. End Function
  142.  
  143. 'Obtiene el nombre del archivo Ej.: E:\Paisaje.jpg" ->obtiene "Paisaje.jpg"
  144. Private Function gFileTitle(ByVal strPathFile As String) As String
  145. Dim strFileTitle As String
  146. strFileTitle = Space(100)
  147. GetFileTitle strPathFile, strFileTitle, 100
  148. gFileTitle = Left$(strFileTitle, InStr(1, strFileTitle, Chr$(0)) - 1)
  149. End Function
  150.  
  151.  



Mete esto en un Form:

Código
  1.  
  2. Private Sub Command1_Click()
  3. Dim strFile As String
  4. strFile = App.Path & "\Dock.jpg"
  5.  
  6. 'MS_SAVE = Guardar (No aparecerá cuadro de diálogo)
  7. 'MS_SAVE_AS = Guardar como ...
  8. Call StartMSPaint("mspaint.exe", strFile, MS_SAVE): CloseMsPaint
  9.  
  10. End Sub
  11.  
  12. Private Sub Form_Load()
  13. Show
  14. 'Centrar formulario
  15. Me.Move (Screen.Width / 2) - (Me.Width / 2), (Screen.Height / 2) - (Me.Height / 2)
  16. Command1.Caption = "Guardar con MsPaint"
  17. End Sub
  18.  
  19.  


Lo que hace...
1. Abre MSPaint en modo oculto (se ejecuta pero no se ve) con la imagen que quieras convertir. Mejor dicho, volver a guardar pero con MSPaint.

2.  Envía un mensaje a MSPaint mediante SendMessage. Que viene a ser el equivalente a pulsar "Guardar" o "Guardar como" del menú. (A elección)

3. Cierra MSPaint.

Download code:
https://mega.co.nz/#!WEllUYYB!JpyYKyzME3pBQc_Q9oZkoa4fnRGuapVAA19fM0Z98oQ
« Última modificación: 12 Mayo 2015, 17:32 pm por okik » En línea

Fran1946

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Re: Salvar JPG con mucho menos peso sin perder calidad
« Respuesta #6 en: 13 Mayo 2015, 19:27 pm »

Hola okik:

Te agradezco mucho tu respuesta, y además con un código completo de programa.

Lo he probado y funciona perfectamente, pero no me soluciona el problema te explico:

Este programa llama al mspaint de windows, en su ruta original de 'System32', por lo tanto si yo ejecuto este programa en Win 7, ejecutara y cargará los archivos JPG en el maspaint de win 7, y este al salvar no disminuye nada el peso de los archivos JPG, que es el objeto de la aplicación.

Y el código que yo tengo en mi aplicación, ejecuta una copia de mspaint.exe de Win XP, que yo he renombrado como 'SDPaint.exe' que estaría en la ruta donde este el ejecutable de mi aplicación.
Por lo tanto si se ejecuta en Win 7, utiliza 'SDPaint.exe' , o sea la copia renombrada de mspaint de win XP, y no el mspaint de Win 7, y entonces si disminuye el peso de los archivos JPG.

Pero además he modificado la copia 'SDPaint.exe' con el editor hexadecimal WinHex, de forma que donde figura como 'MSPaintApp' ahora es 'SDPaintApp'.

Entonces en esta parte de tu código:

 
Código:
'Obtiene el handle de MSPaint que ha abierto el archivo
    Do While hwMsPaint = 0
        Count = Count + 1
        hwMsPaint = FindWindow("MSPaintApp", sFile & " - Paint")
        DoEvents
        If Count > 50000 Then Exit Function
    Loop
  Entonces esta linea:
Código:
hwMsPaint = FindWindow("MSPaintApp", sFile & " - Paint") 

debería ser:
Código:
hwMsPaint = FindWindow("SDPaintApp", sFile & " - Paint")

Pero no comprendo como trabaja esta parte de código que supongo carga mspaint:
Código:
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set objStartup = objWMIService.Get("Win32_ProcessStartup")
    Set objConfig = objStartup.SpawnInstance_
    objConfig.ShowWindow = 12 'Iniciar en modo oculto (usar 1 para modo visible)
    Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
 
    sDir = GetDirCorto(strPathFile) 'Obtiene el directorio corto Ej.: "[Drive]:\Name~1.jpg"

Y no se si se puede modificar para que cargue 'SDPaint.exe' , o sea la copia renombrada de mspaint de win XP.

Si esto fuera posible, entonces si me valdría.

Pero lo que si ha sido definitivo para que el código de mi proyecto, que si utiliza 'SDPaint.exe' , o sea la copia renombrada de mspaint de win XP, pueda salvar sin utilizar SendKeys, es esta linea de tu código:

Código:
X& = SendMessage(hwMsPaint, WM_COMMAND, 57603, &H0) 'Guardar

Y por favor me puedes decir donde has conseguido saber que el parámetro 57603 es 'Guardar' y el 57604 es 'Guardar como', por que esto lo he buscado durante días en Internet y no he conseguido nada, y tengo un listado completo de constantes para SendMessage, y estos 2 parámetros no aparecen, este es el link:

http://www.vbcode.com/asp/showsn.asp?theID=11797

No se si me puedes responder a estas dudas, pero te doy las gracias de todas formas por tu ayuda.

Un saludo.
En línea

okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: Salvar JPG con mucho menos peso sin perder calidad
« Respuesta #7 en: 13 Mayo 2015, 20:06 pm »

Hola #Fran1946#

Me alegro que te haya funcionado correctamente. El cambio puede venir bien para otros usuarios que usen W7 y buen detalle lo de incluir el nombre de clase, que lógicamente cambia. Si quieres, además, si quieres usar otra versión que no se encuentre en el directorio del sistema, puedes poner el directorio:

Call StartMSPaint("C:\Directorio\mspaint.exe", strFile, MS_SAVE)


En cuanto al código  57603-'Guardar' y el 57604- 'Guardar como', hay  varias formas de obtenerlo. Una es extrayendo el menú mediante código o bien usando Spy++, pero es difícil de explicar.

Mediante código, puedes usar este, de prueba. Ejecuta SDPaint y con el paint abierto ejecuta este código.


Código
  1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
  2. (ByVal lpClassName As String, _
  3. ByVal lpWindowName As String) As Long
  4. Private Declare Function GetMenuString Lib "user32" Alias "GetMenuStringA" _
  5. (ByVal hMenu As Long, _
  6. ByVal wIDItem As Long, _
  7. ByVal lpString As String, _
  8. ByVal nMaxCount As Long, _
  9. ByVal wFlag As Long) As Long
  10.  
  11. Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
  12. Private Declare Function GetMenuItemID Lib "user32" _
  13. (ByVal hMenu As Long, ByVal nPos As Long) As Long
  14. Private Declare Function GetSubMenu Lib "user32" _
  15. (ByVal hMenu As Long, ByVal nPos As Long) As Long
  16. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
  17. (ByVal hwnd As Long, _
  18. ByVal wMsg As Long, _
  19. ByVal wParam As Long, _
  20. lParam As Any) As Long
  21. Const MF_BYPOSITION = &H400&
  22. Const WM_COMMAND = &H111
  23. Const MF_POPUP = &H10&
  24.  
  25.  
  26.  
  27. Private Sub Command1_Click()
  28.    Dim hwnd As Long
  29.    Dim hMainMenu As Long
  30.    Dim hMenu As Long
  31.    Dim MenuID As Long
  32.    Dim szbuf As String * 128
  33.    Dim szBufM As String * 128
  34.    Dim I, Z
  35.    Z = 0 'Posición del menú
  36.    I = 2 'Posición del submenú
  37.    hwnd = FindWindow("SDPaintApp", vbNullString)
  38.    If hwnd = 0 Then Exit Sub
  39.    hMainMenu = GetMenu(hwnd)
  40.    hMenu = GetSubMenu(hMainMenu, Z)
  41.    MenuID = GetMenuItemID(hMenu, I)
  42.    Call GetMenuString(hMenu, MenuID, szbuf, 128, MF_BYPOSITION & MF_POPUP)
  43.  
  44.    MsgBox MenuID & "     " & szbuf
  45.  
  46.    'X& = SendMessage(hwnd, WM_COMMAND, MenuID, 0&)
  47.  
  48. End Sub


el valor Z representa el lugar del menú e I el lugar del submenú.

Puedes crear un bucle For/Next y repasar números del -1 al  1000 para I y de esa manera obtener todos los comandos.
« Última modificación: 14 Mayo 2015, 18:55 pm por okik » En línea

Fran1946

Desconectado Desconectado

Mensajes: 56


Ver Perfil
Re: Salvar JPG con mucho menos peso sin perder calidad
« Respuesta #8 en: 14 Mayo 2015, 03:01 am »

Hola de nuevo okik:

Me encanta este código, lo he probado y me ha dado todos los wParam de los menues de Paint, solo he hecho un For-Next de 30 y me han sobrado.
Esto me va a servir de mucha ayuda para muchas cosas.

Sobre esto:
Código:
Call StartMSPaint("C:\Directorio\mspaint.exe", strFile, MS_SAVE)

Así ya lo utilizaba en tu código, pero la desventaja es que cada archivo del ListBox que mando, carga un nuevo 'SDPaint', y eso lo quería evitar, quiero cargar solo en el primer archivo 'SDPaint' y luego mandarle los siguientes al mismo 'SDPaint' sin cerrar lo, pero en tu código no se si esto es posible, al menos yo no se donde hay que modificarlo.

El código para hacer esto, que me lo dado un usuario del foro de canalvisualbasic.net  que precisamente publico este post:

http://www.canalvisualbasic.net/foro/visual-basic-6-0/aporte-arrastrar-ficheros-sobre-una-ventana-21333/#post66767

Y con este código si se hace lo que quiero, pero no se podía salvar con SendKeys, por que lo que hace es Drag&Drop de los archivos a  un solo 'SDPaint' abierto, pero en memoria RAM.
Este código a mi me ha sorprendido, por que abarca todas las posibilidades, aunque yo solo utilizo una y ademas siempre consigue el hwnd de 'SDPaint', por que con:
Código:
 hwnd = FindWindow("SDPaintApp", vbNullString)

Falla mucho, y no siempre consigue el hwnd a la primera.

Y gracias a ti y a el, tengo lo necesario para lo que necesito.

 Por cierto la imagen que adjuntas en el proyecto 'Dock.jpg' que pesa 309 Kb, con  'SDPaint', la reduce a 72.4 Kb un 76.6 % menos, aseguro que son exactamente iguales en resolución y calidad, pero no solo con JPG's de 72 ppp hace lo mismo con JPG's de 300 ppp, no me explico como Paint de XP consigue esto, que no se consigue con ningún otro programa, Photoshop hace justo lo contrario, aumenta el peso.

Te reitero una vez mas las gracias por tu ayuda.

Y si a ti o a alguien le interesa tener esta aplicación que lo diga en este post y yo publico o el link para descargar el ejecutable (60 Kb), o el código del proyecto.

Voy a hacer un vídeo para que se vea como utilizarlo, y lo subo aquí.

Un saludo.
En línea

okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: Salvar JPG con mucho menos peso sin perder calidad
« Respuesta #9 en: 15 Mayo 2015, 12:02 pm »

Quizás te interese este código. No es mío, es de un tal John Korejwa.  Puedes crear o convertir archivos JPG con diferentes niveles de compresión sin perder calidad. Es muy bueno, lo malo es que el como lo hace es muy complejo y resulta dificil de descifrar para luego modifiarlo y usarlo a tu manera. Utiliza módulos de clase y funciones GDI.


http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=50065&lngWId=1

Enlace de descarga:
http://www.planet-source-code.com/vb/scripts/ShowZip.asp?lngWId=1&lngCodeId=50065&strZipAccessCode=tp%2FJ500653091



En línea

Páginas: [1] 2 3 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Comprimir AVI sin perder la calidad
Multimedia
Luchopas 1 2,983 Último mensaje 30 Mayo 2004, 04:40 am
por Songoku
wma a mpg sin perder calidad
Multimedia
vanO 5 3,576 Último mensaje 18 Agosto 2005, 19:04 pm
por Songoku
convertir mp4 a avi sin perder calidad
Multimedia
softdates 7 17,560 Último mensaje 11 Octubre 2009, 13:24 pm
por Songoku
Desarrollan una «app» que ayuda a perder peso
Noticias
wolfbcn 0 1,394 Último mensaje 9 Julio 2014, 18:37 pm
por wolfbcn
video a mp3 sin perder calidad
Multimedia
franfis 7 5,730 Último mensaje 6 Marzo 2015, 18:39 pm
por franfis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines