PDA

Ver la Versión Completa : Cambiar tamaño de una imagen antes de guardar en una bd


chux
10-05-2006, 17:52:24
Veamos, estoy usando JVDBImage (de jedi) para guardar imagenes en una bd (campo tipo blob).
La imagen la guardo de esta manera
jvdbimage1.picture.loadfromfile('loquesea.xxx');

De esa forma puedo guardar bmp, jpgs, todo funciona bien.

...pero claro, antes de guardarla necesitaria reducir su tamaño

Lo que he visto por el foro es todo para bmps, sobre jpgs no he logrado encontrar nada.

Venga saludos

dec
10-05-2006, 18:33:23
Hola,

No sé hasta qué punto podría servir en este caso, pero, suele verse en los algoritmos que trata con imágenes JPG con Delphi, utilizan en realidad dos objetos: "TBitmap" y "TJpegImage".

Es decir, tú cargas la imagen en un objeto "TBipmap" y haces lo que tengas que hacer con la imagen, en este caso reducir su tamaño... luego de eso puedes cargar la imagen en un "TJpegImage" y guardarla ya a partir de ahí.

¿Se comprende? Ya digo que no sé si te servirá en tu caso en concreto, pero, piensa en lo que he dicho. Necesito cambiar el tamaño de una imagen y necesito esa imagen en formato JPG. Cargo la imagen en un "TBitMap" y trabajo sobre ella; luego cargo la imagen en un "TJpegImage" y punto pelota.

Nota: El tipo "TJpegImage" puede llamarse de otro modo. Mi memoria puede fallar fatalmente.

seoane
10-05-2006, 18:48:03
Con el permiso de dec voy a añadir un poco de codigo a la explicacion que te dio.


uses JPEG;

procedure Redimensionar(Imagen: TJPEGIMage; Ancho, Alto: Integer);
var
Bitmap: TBitmap;
begin
Bitmap:= TBitmap.Create;
try
Bitmap.Width:= Ancho;
Bitmap.Height:= Alto;
Bitmap.Canvas.StretchDraw(Bitmap.Canvas.ClipRect,Imagen);
Imagen.Assign(Bitmap);
finally
Bitmap.Free;
end;
end;


Para usar esta funcion solo tienes que pasarle como parametros la imagen y las nuevas dimensiones. Algo asi:


var
Jpg: TJPEGImage;
begin
Jpg:= TJPEGImage.Create;
try
Jpg.LoadFromFile('C:\Original.jpg');
Redimensionar(Jpg,100,100);
Jpg.SaveToFile('C:\Copia.jpg');
finally
Jpg.Free;
end;
end;


O como en tu caso algo asi:

var
Jpg: TJPEGImage;
begin
Jpg:= TJPEGImage.Create;
try
Jpg.LoadFromFile('loquesea.xxx');
Redimensionar(Jpg,100,100);
jvdbimage1.picture.Assign(Jpg);
finally
Jpg.Free;
end;
end;

dec
10-05-2006, 18:55:30
Hola,


Con el permiso de dec voy a añadir un poco de codigo a la explicacion que te dio.


Eso, eso, y sin mi permiso también, que así quedan las cosas mucho más claras. :)

chux
10-05-2006, 20:14:35
vale gracias, mañana en cuanto llegue al curro lo pruebo, pero fijo que va ;)

ingel
24-11-2006, 14:14:30
lo que yo necesitaria es redimensionar pero trabajando con el 'peso' de la impagen..por ej. levanto imagenes de 10 MB y necesito grabarlas en menos de 900K.. se puede hacer algo asi?
Perdon si no corresponde aqui la pregunta .. pero como los aqui presentes han lidiado con esto ...
sds
Ingel

Neftali [Germán.Estévez]
28-11-2006, 11:58:58
También se puede echar un vistazo a la sección de trucos (http://www.clubdelphi.com/trucos/index.php?id=8&scroll=0&scrollb=208) del ClubDelphi.