PDA

Ver la Versión Completa : como comprimir una imagen


esublim
08-01-2023, 21:30:16
buscar_imagen.Execute;
img1.Bitmap.LoadFromFile(buscar_imagen.FileName);

tengo ese codigo para cargar una imagfen en un timage, quiero bajarle la resolucion, los pixeles y el tamaño para despues guardarlo en un blog de mysql pero quiero que sea lijera

ya me hace todos los procesos lo guardo y todo. pero quiero que al momento de seleccionar una imegen de mucha resoulicion bajarlo y asi me la guarde en la base de datos.

ojo repito ya yo muestro y guardo en la base, me falta es bajarle la resolucion antes de guardarlo en la base de datos.

muchas gracias

Casimiro Notevi
08-01-2023, 21:33:21
Hay varios hilos sobre ese tema, ejemplo, este mismo (https://www.clubdelphi.com/foros/showthread.php?t=55265).

esublim
08-01-2023, 22:35:10
No me sirve ese hilo. Por q baja todas las imágenes que subo. Lo q necesito es que por ejemplo si una imagen es de 4000 px x 3000 px lo baje a 600*500 por ejemplo.


Ese hilo baja todas las imágenes a un porcentaje. Y si la imagen es de maña calidad la baja más. La idea es q todas las imágenes por ejemplo se conviertan a 600*500 px

Casimiro Notevi
08-01-2023, 23:00:32
https://neftali.clubdelphi.com/redimensionar-una-imagen-antialiasing/

escafandra
09-01-2023, 20:54:03
Si lo que deseas es bajar el tamaño de la imagen en pixels puedes usar Stretch de TImage o con la API StretchBlt (http://msdn.microsoft.com/en-us/library/windows/desktop/dd145120(v=vs.85).aspx) de GDI pero el resultado es mejor usando GDIplus. En este hilo (http://delphiaccess.com/foros/index.php/topic/9383-multilenguaje-redimensionar-una-imagen-con-gdi-flat-api/) explico como hacerlo con GDIplus Flat con dos funciones básicas:
//---------------------------------------------------------------------------
// Dibuja un Bitmap en un hDC ajustando su tamaño para que quepa entero
// en las coordenadas dadas
procedure DrawImageRect(DC: HDC; Bitmap: HBITMAP; X, Y, W, H: integer);
var
Graphics: Pointer;
GBitmap: THANDLE;
begin
GdipCreateBitmapFromHBITMAP(Bitmap, 0, GBitmap);
GdipCreateFromHDC(DC, Graphics);
GdipDrawImageRect(Graphics, GBitmap, X, Y, W, H);
GdipDisposeImage(GBitmap);
GdipDeleteGraphics(Graphics);
end;



//-----------------------------------------------------------------------------
// Crea y devuelve un Bitmap con unas nuevas dimensiones y la imagen ajustada a estas
function CreateResizeBitmap(Bitmap: HBITMAP; H, W: integer): HBITMAP;
var
Graphics: Pointer;
GBitmap: THANDLE;
DC, dcMem: HDC;
bmOld: HBITMAP;
begin
DC:= GetDC(0);
Result:= CreateCompatibleBitmap(DC, W, H);
dcMem:= CreateCompatibleDC(DC);
bmOld:= SelectObject(dcMem, Result);

GdipCreateFromHDC(dcMem, Graphics);
GdipCreateBitmapFromHBITMAP(Bitmap, 0, GBitmap);
GdipDrawImageRect(Graphics, GBitmap, 0, 0, H, W);
GdipDisposeImage(GBitmap);
GdipDeleteGraphics(Graphics);

SelectObject(dcMem, bmOld);
DeleteDC(dcMem);
ReleaseDC(0, DC);
end;


El tema del formato final en el que se guarde la imagen es otro asunto que también se puede hacer con GDIplus.

Saludos.