¿Cómo puedo comprimir datos BLOB en la base de datos sqlite para reducir su tamaño?
Frecuentes
Visto 1,220 equipos
1
Tengo una base de datos sqlite que contiene datos BLOB.
Cada campo BLOB contiene un imagen.
(Concretamente esta base de datos fue creada por Maperitive, una herramienta que genera mbtiles)
Me gustaría reducir el tamaño de cada campo BLOB, para reducir el tamaño de la base de datos sqlite.
Lo que he hecho hasta ahora es:
He creado un script PHP que
1) lee los campos BLOB, los convierte en imágenes (.jpg) y almacena las imágenes en un nuevo directorio llamado 'BLOB2IMAGES'.
<?php file_put_contents("./BLOB2IMAGES/". $currentImage, $BLOB_DATA); ?>
2) Luego, uso una herramienta externa llamada
ImageMagick. Esta herramienta tiene varios comandos para modificar una imagen. Yo uso el comando de mogrificación esta sobrescribe
imágenes modificando la calidad de las imágenes.En ese caso se reduce el tamaño de las imágenes.
mogrify -format jpg -quality 75% -path "C:\BLOB2IMAGES" "C:\BLOB2IMAGES\*.jpg"
3) Luego he creado un segundo script PHP que lee el
directorio BLOB2IMAGES, convierte cada imagen comprimida en una matriz de bytes y almacena la matriz de bytes en la base de datos sqlite. (Atención:He creado una nueva base de datos sqlite para almacenar los 'nuevos' datos BLOB con el tamaño reducido).<?php $byte_array_of_Compressed_image =file_get_contents(("./BLOB2IMAGES/". $compressedImage); ?>
Noté que en el Primera conversión de los datos BLOB a imágenes (.jpgs) la calidad de las imágenes producidas no es tan buena y eso no me gusta. Luego creé un programa JAVA simple, que convierte los datos BLOB en imágenes y nuevamente noté que la calidad no era tan buena.
En general, me gustaría reducir el tamaño de los datos BLOB, por lo que seguí los pasos anteriores. ¿Hay alguna otra forma de reducir el tamaño de los datos BLOB? ¿Alguna herramienta o alguna extensión adicional? ¿Debería usar un enfoque diferente al que ya he usado?
Me encantaría si me pudiera dar soluciones o ideas relacionadas con mi problema.
Gracias por adelantado
0 Respuestas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php sqlite imagemagick size blob or haz tu propia pregunta.
El parámetro de calidad JPEG le permite compensar la calidad por el tamaño. Pruebe con otros valores. ¿Por qué no usas PNG? - CL.
Causa PNG aumenta el tamaño de la base de datos sqlite. - programmer
@CL. ¿Cuál es su opinión? ¿Debería crear imágenes PNG y luego comprimirlas en lugar de .jpg? ¿Hay alguna otra solución para reducir el tamaño de los campos BLOB? - programmer
Debería poder reducir los archivos PNG reduciendo la profundidad de color a 8 bits y haciendo otros cambios con algunos herramienta de optimización. - CL.