![Photo](http://www.gravatar.com/avatar/fa729b9f8344d85411fc73e395e85d00?s=100&d=http%3A%2F%2Fdelphiaccess.com%2Fforos%2Fpublic%2Fstyle_images%2Fmaster%2Fprofile%2Fdefault_large.png)
COMO PUEDO CAMBIAR EL ESPACIO QUE OCUPA LAS FOTOS EN EL DISCO DURO
#1
Posted 23 September 2014 - 06:08 AM
Tengo un sistema de carnet el cual almacenos las fotos en la Base de Datos, el problemas es que dicho sistema dura mucho para cargar en una maquina local y si trato de acensar por Red no responde y solo tiene 4,300 registro uso Delphi 7 y Accesse, la pregunta es la siguiente:
Como puedo hacer para especificarle un tamaño y peso a dichas fotos? ME GUSTARÍA QUE NO PASEN DE 300KB
gracias
#2
Posted 23 September 2014 - 09:53 AM
1) Abandona Access y emplea un motor que aporte muchas prestaciones. El que más se recomienda por estos lares es Firebird, totalmente Open Source, escalable, seguro, y rapidísimo. No requiere de mucho mantenimiento. Es mi elección y el que recomiendo.
2) Utiliza formatos de imágenes de compresión. Como png o jpg/jpeg
3) Define además, un tamaño máximo en pixeles para las mismas
Saludos,
#3
Posted 23 September 2014 - 11:19 AM
Las imágennes rasters que son aquellas que guardan la información de cada punto que conforma la imagen, son las que más ocupan espacio, por esta razón se las comprime. Al comprimir algunos formatos descartan información superflua (a veces no tannto) otros comprimen la imagen sin perder información.
Existe un formato llamado JPEG que es sin duda el mejor para comprimir imágenes (con perdida).
El tamaño real de una imagen no es el mismo que el tamaño de impresión de una imagen. El tamaño real está definido en cantidad de pixeles, mientras que el tamaño de impresión en cm o pulgadas. De aquí que se conoce el concepto de ppp o puntos por pulgada (cuadrada).
Si la imagen es para ser exhibida en pantalla no requiere de una resolución mayor que 100 ppp (comúnmente 92), en el caso de la foto carnet, puede tener 400 pixeles de alto por 400 pixeles de ancho y basta. Pero si se requiere impresión, esto cambia y se debe considerar la calidad de impresión, etc. pero en términos generales bastará con triple: 1200 píxeles x 1200 pixeles.
Puedes utilizar un programa para cambiar la resolución y tamaño de las imágenes o bien el tamaño real simplemente. Si no estoy muy equivocado IrfanView hace ese trabajo y es de distribución gratuita. http://www.irfanview...wnload_engl.htm
Coincido con Delphius, en eso de cambiar de motor de base de datos. Ya que Firebird, te permite almacenar imágenes en formato JPEG. Y buscando en DelphiAccess hallarás la manera de hacerlo fácilmente.
Para calcular exactamente el espacio de las imágenes debes tener en cuenta que cada pixel (punto de la imagen) ocupa tres Bytes cuando la profundidad de color es de 24 bits, que es lo más usual. 3,7 MB para el caso de una imagen de 400x400 pixeeles cuadrados y profundidad de color de 24 bits sin comprimir. Que en formato JPEG resulta aproximadamente la décima parte.
Un factor reductor en el formato JPEG son los plenos, cuanto más, más se puede reducir el tamaño.
Saludos.
#4
Posted 23 September 2014 - 11:33 AM
![;)](http://delphiaccess.com/foros/public/style_emoticons/default/15.gif)
Saludos,
#5
Posted 23 September 2014 - 01:09 PM
Cram, el formato png es mucho más óptimo que de jpg. Y como extra: es libre.
Saludos,
JPEG (Joint Photographic Expert Group), GIF (Graphic Information File), PNG (Portable Network Graphics) hasta donde sé son libres y ampliamente utilizados en la red y en el caso de JPEG en dispositivos de venta masivo, como las cámaras fotográficas.
Pero tendré que verificar esto, luego de esa aclaración, ya que todo cambia.
![:shocked:](http://delphiaccess.com/foros/public/style_emoticons/default/shocked.gif)
PNG Permite el uso de canales alpha, pero dudo que sea necesario esto para mostrar fotos carnet. Aunque si lo que pretende Edwin_Simon es fundir las fotos sobre el canvas... es una buena opción.
PNG es sin pérdida y usa el algoritmo de compresión LZ77, mientras que JPEG utiliza una conversión de modelo de color, además de una compresión con pérdida y elimina aquellos detalles inapreciables, llegando a un máximo de reducción de espacio.
No entiendo porque PNG es más óptimo, al menos en el caso de fotos carnet, no. Pues comúnmennte se toman sobre un fondo liso (de color uniforme).
PNG suele usarse en imágenes en las que no se desea perder detalles (gráficos, tablas, etc.)
Pero en fotos, JPEG es el más usado. Puede comprobar la reducción de espacio utilizando una imagen cualquiera.
JPEG con una calidad de 8, casi no muestra diferencias con la original. Por eso se utiliza en las cámaras fotográficas y en los PDFs, para citar algunos usos.
Esto me obliga a probar todas las maneras posibles de hacer que PNG ocupe menor espacio que un JPG
![(li)](http://delphiaccess.com/foros/public/style_emoticons/default/32.gif)
![(li)](http://delphiaccess.com/foros/public/style_emoticons/default/32.gif)
![(li)](http://delphiaccess.com/foros/public/style_emoticons/default/32.gif)
![(y)](http://delphiaccess.com/foros/public/style_emoticons/default/17.gif)
#6
Posted 23 September 2014 - 01:37 PM
Ahora bien, si bien JPG puede comprimir más las imágenes, hay situaciones en las que PNG puede mejor comprensión dependiendo de la relación alto y bajo contraste.
Sobre el licenciamiento, si afirmo. No es libre. Rige cierto licenciamiento/patentamiento, aún hoy cuestionado. Es por ello que nació el estándar JPEG que busca liberar las ataduras de las patentes en disputa. No nació libre, pero si difusión. Por su parte PNG es totalmente libre.
Saludos,
#7
Posted 23 September 2014 - 04:06 PM
Para redimensionar imágenes podemos usar aplicaciones de terceros o hacerlo nosotros mismos. GDI+ nos permite hacerlo, en este hilo muestra una forma sencilla de realizarlo: Redimensionar una imagen con GDI+ flat API.
También publiqué la forma de convertir imágenes de npg a jpg: convertir imágenes png a jpg, la forma de guardar archivos gráficos en varios formatos y como leer archivos gráficos en varios formatos, todo ello usando GDI+
Saludos.
#8
Posted 24 September 2014 - 06:44 AM
Para fotos el mejor formato es JPEG, nada de BMP, PNG ni TIFF. Esos formatos son sin perdida y eso significa que una foto de 300KB en JPEG pasa a 2 o 3 MB en estos formatos: Para imagenes con degradados, como fotos, el JPEG es el más recomendable (por eso lo usan las camaras). Para imagenes con tintas planas (tipo logotipos, comics, etc) el PNG es el rey (y el GIF es privativo seguro, por eso se creo el PNG). El TIFF se usa para archivar fotos sin perdida pero ahora se usa más el DNG (Digitial NeGative, un RAW de adobe).
Asi que lo que se necesita es recuperar cada imagen y convertirla a JPEG con un maximo de pixles por lado (digamos 1000 pixeles, con lo que no pasas de 1 megapixeles), una compresión del 80% (por ejemplo, esto no lo toco en el código porque suele fijarse al 90% que está bien), y volverla a guardar.
Esto te deja la foto en 200KB aproximadamente, o menos.
Aqui tienes como reducir los pixeles de un JPEG: http://www.delphipag...ad.php?t=128152
Y este trozo de código es el que yo uso para convertir de un formato a otro (es de delphi 7, es posible que los JPEG o los PNG hayan cambiado de nombre en otras versiones):
procedure ConvierteImagen(BitMap: TPicture; Formato: string); var PicBmp, Pic: TPicture; begin PicBmp:= TPicture.Create; Pic:= TPicture.Create; try // Paso BitMap a BMP (no puedes pasar de jpeg a png directamente) PicBmp.BitMap.Assign(BitMap.Graphic); // Paso del PicTmp al Pic final. if (Formato='bmp') then begin Pic.BitMap.Assign(PicBmp.BitMap) end else if (Formato='jpg') then begin Pic.Graphic:= TJPEGImage.create; Pic.Graphic.Assign(PicBmp.BitMap); end else if (Formato='png') then begin Pic.Graphic:= TPNGObject.create; Pic.Graphic.Assign(PicBmp.BitMap); end else begin //No deberia llegar aqui... raise exception.create('Error al convertir a '+Formato); end; // Uso el nuevo picture en lugar del antiguo BitMap.Assign(Pic); finally //Limpieza FreeAndNil(PicBmp); FreeAndNil(Pic); end;
#9
Posted 24 September 2014 - 12:31 PM
Asi que lo que se necesita es recuperar cada imagen y convertirla a JPEG con un maximo de pixles por lado (digamos 1000 pixeles, con lo que no pasas de 1 megapixeles), una compresión del 80% (por ejemplo, esto no lo toco en el código porque suele fijarse al 90% que está bien), y volverla a guardar.
Esto te deja la foto en 200KB aproximadamente, o menos.
Algo así, lo hice en cierta oportunidad. Cuando me tocó digitalizar imágenes de un catálogo de caños de escape (un trabajo inconcluso para mi hermano) y así poder acceder al mismo de forma electrónica. Si bien los tamaños de las imágenes descriptivas de los segmentos de escapes no coinciden con los de una foto carnet. Llegué más o menos a una cifra como esa. Solo que me encontré con el problema de no poder acceder desde controles Data-Aware a los JPEG almacenados, luego aprendí el truquito que anda en algúna parte de Delphi Access.
Por otra parte, para mostrar imágenes en pantalla no se necesita más que 1 MegaPixel (aprox. 1 millón de pixeles), ya que es difícil que una pantalla llegue a tal dimensión (Una de un monitor de 19 pulgadas a 1440 x 900 pixeles, sí). Pero no es necesario que la fotografía tome la pantalla completa.
Si por el contrario, en determinado momento será necesario imprimir las imágenes, todo cambia.
Lo importante es entender el concepto de resolución, es decir píxeles por pulgada cuadrada, que como dije antes, unos 300 ppp son necesarios para una fotografía, mientras que para mostrarlos en las pantallas actuales puede rondar los 100 ppp.
160 pixeles de alto x 160 pixeles de ancho, da un total de 25600 pixeles cuadrados (o 0,025 Megapixeles). Multiplicando a eso por 3 Bytes, no da un total de 76 mil Bytes (o menos de 0,073 MB o 75 KB). Y eso sin comprimir. En un monitor típico de 17 a 20 pulgadas con una resolución de 1366x768, la imagen tendrá aproximadamente la real (4x4cm2, creo que es una medida internacional).
Suponiendo unas 10 mil personas, no da un total de memoria necesaria de 730 MB Aprox. (Sin comprimir)
Que con JPEG terminará en unos 75 MB.
![(h)](http://delphiaccess.com/foros/public/style_emoticons/default/11.gif)
Si se necesita immprimir, podría llegar a 250 MB.
![(y)](http://delphiaccess.com/foros/public/style_emoticons/default/17.gif)
Claro que suponiendo 10 mil fotos.
![:o](http://delphiaccess.com/foros/public/style_emoticons/default/08.gif)
Saludos.
#10
Posted 25 September 2014 - 08:17 AM
#11
Posted 25 September 2014 - 10:22 AM
gracias a todos por la ayuda presta, pero mi interés es de mejor la movilidad de la Base de Datos que por lo visto es porque guardo las fotos en la misma, como puedo hacer para mejorar la movilidad?
Ya te han dado la solución, Cámbiate a otro motor de bases de datos, en este caso Firebird, si no lo deseas hacer, pues te recomiendo lo siguiente: Crea otra Base de Datos Access con solamente las imágenes y la principal solo lo utilizas para informaciones de Textos y numéricas, ahora bien, es un poco tedioso porque tendrás que pasar todas las imágenes de la Base de Datos anterior a la nueva y eliminarlas, se notará que se mueve un poco "mejor", ahora eso lo decides tú
![;)](http://delphiaccess.com/foros/public/style_emoticons/default/15.gif)
Saludos.
#12
Posted 25 September 2014 - 11:41 AM