Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Delphi para la web
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-05-2020
Avatar de Maniches
Maniches Maniches is offline
Miembro
 
Registrado: nov 2012
Ubicación: Lima - Perú
Posts: 67
Poder: 12
Maniches Va por buen camino
Lightbulb Nuevo formato de imagen para la web - WEBP

Hola Amig@s del foro
He estado investigando con respecto a este formato y hacer que delphi lo soporte.
He buscado en foros y he logrado encontrar la librería DLL y la definición de usar la librería que Google proporciona.

He intentado hacer la conversión de un archivo *.BMP hacia *.Webp obteniendo un resultado de BMP(655kb) y WebP(134kb).
el problema que está ocurriendo es que no está respetando los colores de la imagen original. tiene la misma claridad, pero no los mismos colores.

les adjunto una imagen para que vean el resultado. les comparto parte del código y me ayudan con sus sugerencias o que puede estar haciéndose erradamente.

Definición de función que usa la librería:

Código Delphi [-]
  {$if defined(Win32)}
    LIB_WEBP = 'libwebp.dll';
  {$elseif defined(Win64)}
    LIB_WEBP = 'libwebp64.dll';

function WebPEncodeBGR(const bgr: PByte; width, height, stride: Integer; quality_factor: Single; var output: PByte): Cardinal; cdecl; external LIB_WEBP;

procedimiento que hace la conversión: (Se carga la imagen bmp al objeto TIMAGE)
Código Delphi [-]

imgConvertir: TImage;

procedure TForm1.btnConvertirWebPClick(Sender: TObject);
var
  src, dst: TBytes;
  data, pb: PByte;
  iy, wdt, hgt, datasize, stride: Integer;
  bmp: TBitmap;
begin
    bmp := TBitmap.Create; {Converting to Bitmap}
    bmp.PixelFormat := pf24bit;
    bmp.Width := imgConvertir.Picture.Width;
    bmp.Height := imgConvertir.Picture.Height;
    bmp.Canvas.Draw(0, 0, imgConvertir.Picture.Graphic);
    stride := NativeInt(bmp.ScanLine[1]) - NativeInt(bmp.ScanLine[0]);
    datasize := WebPEncodeRGB(bmp.ScanLine[0], bmp.Width, bmp.Height, stride, 100, data);
    SetLength(src, datasize);
    MoveMemory(src, data, datasize);
    TFile.WriteAllBytes(ExtractFilePath(Application.ExeName)+'\tiger.webp', src);
    bmp.Free;

¿Qué sugerencia u opiniones? ¿capaz se está enviando los parámetros de forma errada?
Es muy interesante usar este formato liviano para los desarrollos web. Les dejo un link para que vean su información: https://developers.google.com/speed/webp
Imágenes Adjuntas
Tipo de Archivo: jpg 2020-05-03_11-13-22.jpg (33,9 KB, 24 visitas)
__________________
Maniches
maniches@outlook.com

Última edición por Casimiro Notevi fecha: 03-05-2020 a las 20:55:48.
Responder Con Cita
  #2  
Antiguo 04-05-2020
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En mi caso, ese cídigo me funciona perfectamente.
He utilizado Delphi Rio 10.3 y la v0.6.0 de la librería (en mi caso he probado con la de 32b).

Cosa curiosa es que los tamaños de imagen segun la documntación deberían ser estos:
"WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller than comparable JPEG images at equivalent SSIM quality index."

Los tamaños en mi caso para una imagen sencilla son los siguientes:
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 04-05-2020 a las 12:31:33.
Responder Con Cita
  #3  
Antiguo 06-05-2020
Avatar de Maniches
Maniches Maniches is offline
Miembro
 
Registrado: nov 2012
Ubicación: Lima - Perú
Posts: 67
Poder: 12
Maniches Va por buen camino
Lightbulb

Amigo Nefali,
quiero compartirte el codigo para que puedas verificar lo que indico y capaz me puedas sugerir cual es el problema.
Yo lo he probado con Delphi 10.3.3

Source:
https://mega.nz/file/6k9lkSQI#bEC6mf...xrUldlKUssP8V4

Muchas Gracias.
__________________
Maniches
maniches@outlook.com
Responder Con Cita
  #4  
Antiguo 06-05-2020
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
El problema está en la unit libwebp.pas que estás usando.
Si llamas directamente a la DLL funciona correctamente. Imagino que la unit no está actualizada del todo o tiene algun bug.


Define la importación de la función:
Código Delphi [-]
function WebPEncodeBGR(const bgr: PByte; width, height, stride: Integer; quality_factor: Single;
                       var output: PByte): Cardinal; cdecl; external 'libwebp.dll';


Y utiliza la función WebPEncodeBGR directamente en tu código.
Archivos Adjuntos
Tipo de Archivo: zip ConvertToWebP_bis.zip (838,2 KB, 13 visitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 07-05-2020
Avatar de Maniches
Maniches Maniches is offline
Miembro
 
Registrado: nov 2012
Ubicación: Lima - Perú
Posts: 67
Poder: 12
Maniches Va por buen camino
Lightbulb

Hola Neftali,
Tenias razon, he probado lo que mencionas y el ejemplo modificado ahora si esta funcionando. haciendo uso el ejemplo y con la libreria que adjunta el resultado es> *.webp 136.kb

entonces como mencionas y en base a la imagen que comparte tambien hice la convercion del archivo BMP hacia JPG utilizando varias herramientas: programa maneja imagenes, conversor en linea(media.io) y la libreria(ImageEn) usando sus demos de este ultimo. ahi comparto los resultados: Img1

He bajado las ultimas librerias de Google WebP (img2)

He ejecutado la conversion de la librerias mencionada en la img2 el resultado esta en la (img3)

como apreciaras el resultado con el archivo que comparti (*.bmp) si esta haciendo la conversion con un tamaño 36kb (img4)

al parecer si esta siendo menor la comprension del formato WebP, pero para ello no se como poder obtener la (*.dll) de la version 1.1.0 que es la ultima.

Si tu conoces la forma de obtener la ultima version de la DLL te agradeceria mucho para validarlo desde delphi si es cierto lo que indican de este formato.

Muchas gracias por tu apoyo.

Saludos.
Imágenes Adjuntas
Tipo de Archivo: jpg 1_Conversiones a JPG.jpg (29,4 KB, 5 visitas)
Tipo de Archivo: jpg 2_Libreria WebP 1.1.0 - (06-01-2020).jpg (27,2 KB, 5 visitas)
Tipo de Archivo: jpg 3_Comando conversion lib 1.1.0.jpg (38,0 KB, 7 visitas)
Tipo de Archivo: jpg 4_Resultado conversion libreria 1.1.0.jpg (26,2 KB, 7 visitas)
__________________
Maniches
maniches@outlook.com
Responder Con Cita
  #6  
Antiguo 07-05-2020
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si te sirve, el compilado de la version 1.0.1 te lo adjunto al mensaje.
Archivos Adjuntos
Tipo de Archivo: zip libwebp_1_0_1.zip (190,6 KB, 10 visitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 09-05-2020
Avatar de Maniches
Maniches Maniches is offline
Miembro
 
Registrado: nov 2012
Ubicación: Lima - Perú
Posts: 67
Poder: 12
Maniches Va por buen camino
Muchas gracias por tu apoyo Neftali.
Reemplace la dll y se obtiene el mismo resultado con el ejemplo que compartiste.

Sera motivo de encontrar la version 1.1.0 y hacer la prueba para obtener el resultado.

Saludos.
__________________
Maniches
maniches@outlook.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Formato imagen WebP (google) Maniches Varios 1 31-10-2018 20:18:11
WebAssembly : Nuevo formato binario para aplicaciones web nlsgarcia La Taberna 1 19-06-2015 17:21:15
Agregar nuevo formato y codecs al TMediaPlayer asdbernardo Varios 3 29-05-2014 16:59:48
Nuevo Formato Hacienda elguille Varios 0 18-01-2006 09:07:24
nuevo en delphi (como dar formato a una columna en dbgrid ) gmontes Conexión con bases de datos 4 13-09-2004 20:53:47


La franja horaria es GMT +2. Ahora son las 16:03:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi