Autor Tema: Comprimir texto  (Leído 5753 veces)

0 Usuarios y 1 Visitante están viendo este tema.

antonio2005pe

  • Bytes
  • *
  • Mensajes: 49
  • Reputación: +0/-1
    • Ver Perfil
Comprimir texto
« en: Febrero 21, 2015, 02:19:18 am »
Buenas,

Queria saber si hay alguna forma de comprimir un texto y luego descomprimirlo, lo que quiero hacer es usar el ucImage para transformar la imagen a texto, comprimirlo y guardarlo como texto en la base de datos para luego descomprimirlo y devolver la imagen al ucImage, se entiende?


Gracias.

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:Comprimir texto
« Respuesta #1 en: Febrero 21, 2015, 04:16:30 am »
Que formato es la imagen? El tema de la compresion solo te sirve si la imagen esta en formato BMP. Los demas formatos ya estan comprimidos.
Para pasar la imagen a la db tenes 2 formas.
Si tu columna es del tipo blob, podes guardar los datos binarios sin mas detalle (creo que los podes obtener usando .GetByteStream o algo asi).
En el caso de que tu columna sea texto, podes usar Base64 para encodear la data binaria a texto y viceversa.

Para terminar, en la seccion de aportes hay un ejemplo mio sobre base64. En el blog de leandro hay un snippet para comprimir/descomprimir un array de bits (solo usalo con BMPs, sino no tiene sentido).

'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

antonio2005pe

  • Bytes
  • *
  • Mensajes: 49
  • Reputación: +0/-1
    • Ver Perfil
Re:Comprimir texto
« Respuesta #2 en: Febrero 22, 2015, 02:31:16 pm »
muchas gracias por la pronta respuesta, mi formato de imagen es jpg, quiero que todas las imagenes se gurden en la base de datos pero el problema es que hace que la base de datos se hago muy grande y para hacer backup y moverlo son un problema, tampoco tengo idea de como guardar una imagen del control image a la base de datos, si me podrias facilitar un ejemplo, gracias.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Comprimir texto
« Respuesta #3 en: Febrero 22, 2015, 02:51:55 pm »
Saludos

Como te comentaron solo al formato BMP le puedes aplicar compresión, el formato JPG ya está comprimido y no lo podrás comprimir mas, y si pretendes volver al JPG en BMP tampoco lograras reducción, por ende tu base de datos ira pesando mas a medida que metas mas imágenes ya comprimidas.
¿No podrías considerar la opción de no guardar la imagen dentro de la BD? de tal manera que solo guardas en la BD la ruta hacia esa imagen como usualmente casi todos lo hacemos y veras como tu base de datos se reduce en peso muchísimo.

Solo consideraría guardar las imágenes en la BD si estas fueran de una confidencialidad extrema (y ni aun asi porque me las pirateo con un PrintScreen). Espero estés a tiempo de considerarlo.
Me encuentras en YAcosta.com

antonio2005pe

  • Bytes
  • *
  • Mensajes: 49
  • Reputación: +0/-1
    • Ver Perfil
Re:Comprimir texto
« Respuesta #4 en: Febrero 23, 2015, 04:11:22 am »
muchas gracias por tu respuesta, ahora que me di cuenta el ucimage ya tiene el modulo de base64 tambien encontre un modulo que me comprime el array y lo guardo a la base de datos para luego descomprimirlo y ver las imagenes. Las imagenes que guardo son confidenciales ya que cualquiera lo podria modificar en la ruta del disco y cambiar la imagen si solo lo redirecciono a algun lugar del disco. son imagenes de facturas, egresos y esas cosas.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Comprimir texto
« Respuesta #5 en: Febrero 23, 2015, 01:26:15 pm »
Las rutas no las podrían modificar si es que en tu software no das permiso para ello, lo que si podrían hacer es mover las imágenes, pero ¿porque las moverían? ¿hay niños usando esa computadora?, entonces el problema no es guardar la imagen en la BD, el problema es gestionar a la gente que usa esa PC, por ello la solución no es meter la imagen en la base de datos porque si se trata de tener una mala intención es muy fácil conseguir esas imágenes.

Ahora, te diré que "facturas, egresos y esas cosas" no tienen nada de confidencial, es mas, las facturas son documentos de alguna manera "públicos", te lo comento porque estoy en esa misma categoría de software desde hace años, salvo que se trate de una gestión ilegal no vale el costo de mantener las imágenes en la base de datos, pero bueno, ya te darás cuenta.

No creo que logres mucha compresión, igual tu BD va a estar 90% grande solo por las imágenes "comprimidas".

Suerte
Me encuentras en YAcosta.com

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:Comprimir texto
« Respuesta #6 en: Febrero 23, 2015, 05:56:10 pm »
Yvan, yo laburé en un tiempo con una DB que guardaba imagenes en JPG y si bien pesaba sus GBs, funcionaba lo mas bien. Es cierto que al final de cuenta quedan almacenadas en un lugar "mas seguro", y que el acceso depende de la conexion a la DB (en cambio con windows, deberias crear un user en el server para acceder a tal ruta, y tu soft deberia loguearte para eso).
De todas formas hay metodos para encriptar un archivo usando una KEY, por ejemplo haciendo XOR ciclicamente entre todos los bytes del archivo y los caracteres de tu clave.
Saludos
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Comprimir texto
« Respuesta #7 en: Febrero 23, 2015, 06:43:03 pm »
La razón e importancia de guardar las fotos dentro de la BD finalmente dependerá de lo que cada uno o cada empresa considere, la razón de guardar documentos legales (facturas) me resultan irrelevantes e innecesarios hacerlo dentro de la BD, pero al final es mi opinión, dependerá de la susceptibilidad del dueño de la empresa o su grado de esquizofrenia ( ;D) al exigir a su programador que guarde las imágenes dentro de la BD para que se sienta "mas seguro" (si es que eso le han hecho creer) o es lo que finalmente piensa el programador.

En ningún momento indique que guardar las imágenes en la BD fuera a resultar que la BD se ponga mas lenta o que pierda performance, y no lo hice porque nunca tuve la experiencia de llegar a ese punto de tener una BD con varios gigas principalmente por el peso de dichas imágenes (a nivel experimental si me gustaría hacerlo). Vaya que ni siquiera el registro nacional de identidad de mi pais tiene las fotos de los ciudadanos dentro de una bd, pude comprobar que las tienen en una simple carpeta.

Al margen de si me parezca o no que sea prudente guardar las imágenes en la BD, creo que hay una tarea fundamental que no debe perderse de vista, una base de datos sin una gestión de respaldo es casi jugar con fuego, la BD se puede estropear por X, Y y Z razones y por eso es necesario hacer los backups periódicamente... ¿te imaginas respaldar un archivo de varios gigas periódicamente donde dicho peso sea mayormente de las imágenes? y que pasa si la gestión de backup se hace por red??? un trafico pesadito eh.

Bueno, quizá no es tan pesado hacer backups de una BD con varios gigas y yo estoy exagerando, pero en lo personal si me resultaría incomodo hacerlo contra esa BD porque mi software hace backups todos los dias en caliente y en algunos clientes incluso dos veces por día. Una vez que se dispara el backup aplico en segundo plano el winrar hacia el archivo bak y luego que termino lo muevo a la carpeta sincronizada de Mega, si tuviera varios gigas y el grueso de ese peso fuera por las fotos... no me sentiría tan feliz con esa solución ademas de la redundancia de fotos (redundancia que si me interesaría hacerla a los registros para tener una capa mas de trazabilidad) :-).

Finalmente si me parece fantástico el método de encriptar usando una key, supongo que te refieres a hacerlo por fuera de la BD, o sea, aplicarla a los archivos jpg por ejemplo, sino.. pues no dije nada jeje.

Abrazos y la seguimos en el wazzup que voy de salida.   :-)
Me encuentras en YAcosta.com

antonio2005pe

  • Bytes
  • *
  • Mensajes: 49
  • Reputación: +0/-1
    • Ver Perfil
Re:Comprimir texto
« Respuesta #8 en: Febrero 24, 2015, 12:34:00 am »
muchas gracias por sus repuestas, primeramente no se como encriptar una imagen jpg con un KEY, en cuanto a los GBs de lo que pesaria la DB es realmente preocupante para hacer backups, pero y si pongo las imagenes dentro de otro DB que solo almacena las imagenes?, podria solo hacer backup de las imagenes una vez a la semana o al mes, en el peor de los casos solo se perderian las imagenes. Que me recomiendan ustedes?

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Comprimir texto
« Respuesta #9 en: Febrero 24, 2015, 03:02:52 am »
Ok, si finalmente no te convencí  ;D, entonces esa es una buena alternativa, si yo me viera en extremo obligado a meter las imágenes en una BD esa alternativa de solución que planteas me resulta muy aceptable, tener una BD de imágenes y otra transaccional me parece una buena idea.
Me encuentras en YAcosta.com