2012-02-17 19 views
6

Normalmente, cuando una imagen entra en mi sitio, la guardo como jpg utilizando una biblioteca de imágenes que escribí con la calidad predeterminada del 80%. Ahora cuando tengo que hacer alguna otra operación en él (como recortarlo o incluso cambiarle el tamaño), la imagen se abrirá como jpg, se procesará y luego se guardará nuevamente. Sin embargo, si se ha comprimido antes de que no quiera comprimirlo de nuevo o de lo contrario cada vez que necesite realizar una operación, la calidad disminuirá.¿Detecta la tasa de compresión JPG?

¿Hay alguna forma de detectar la cantidad de imagen que ya ha sido comprimida antes (en comparación con una versión en png, supongo) usando herramientas en las bibliotecas estándar de GD php? Sé que las herramientas que detectan dónde se ha fotografiado una imagen lo hacen al comparar cantidades relativas de compresión, así que creo que es posible detectar la cantidad de compresión, pero ¿alguien sabe cómo realizar este cálculo? Gracias.

+0

por lo que sé, no se puede obtener una tasa de calidad a partir de un archivo jpg –

+1

sé que no se guarda en los metadatos del archivo en sí, pero tal vez hay alguna manera de calcularlo – hackartist

+0

No. No puedes .. –

Respuesta

8

No se puede obtener un valor de calidad de JPG. Además, el valor de calidad depende del codificador. No es un estándar o algo como esto. Algunos programas tienen solo (bajo, medio, alto), en unos 20 podría ser mejor que 90.

En segundo lugar, JPG simplemente perderá calidad en cada codificación cosenoquente, incluso si la guarda como la mejor calidad siempre. Triste verdad de la vida :) Las únicas operaciones que no empeoran la calidad son volteos y rotaciones (y cultivos, si están alineados con el tamaño del bloque JPEG).

Regla del pulgar: Codifíquelo siempre con el mismo valor de calidad. Ejemplo: si lo guarda una vez, digamos 60, entonces no hay ganancia si lo guarda en 80 la próxima vez. Sólo tamaño de archivo más grande.

Además, intente reducir el número de tales recodificaciones y realice cada manipulación en el original, si tiene suficiente espacio de almacenamiento disponible.

+0

Respuesta actualizada. –

1

Deberá almacenar la calidad de la imagen en una base de datos para que pueda saber si ya se ha comprimido o no.

+0

Incluso si cambia el tamaño de la imagen, la calidad disminuirá. Guardar eso no tiene sentido Pero, bien pensado, por lo tanto, hay un +1. –

+0

@RokKralj Sugiero guardar para que no lo comprima más de una vez. Podría deteriorar aún más la imagen. – ppp

+0

No entiendes todo. No hay "compresión", solo se guarda con un valor de calidad. Si quieres decir que lo guarda una vez a los 80, entonces recuerda eso, ¿así que puede guardarlo en 100 la próxima vez ...? Eso solo aumentaría el tamaño del archivo sin ganancia de calidad. 80 -> 80 -> 80 es el correcto guardado. –

1

Para evitar comprimir la imagen varias veces, simplemente podría comparar el tamaño de archivo del tamaño con el original.

  • Si el tamaño del archivo es notablemente más grande que usted ha aumentado la tasa, por lo que no lo usa.
  • Si es notablemente más bajo de lo que se ha comprimido, utilícelo.

Además, como volver a comprimir un archivo con la misma tarifa solo reduce una pequeña cantidad del tamaño del archivo, si usa números redondos para sus tasas (60%, 70%, 80% etc.) puede determinar la tasa si el tamaño del archivo de redimensionamiento es muy similar al del original.

Por ejemplo, comprimir un archivo 1,844 KB en:
- 90% = 2,115 KB. El tamaño aumentó, así que no lo usaré.
- 80% = 1,843 KB. Esto es casi idéntico al tamaño del archivo original, por lo que puedo suponer que el original tiene una tasa de 80%.
- 70% = 1,567 KB. Esto se ha comprimido, así que lo usaré.

Por último, si solo le preocupan las velocidades de las imágenes que ha comprimido usted mismo, entonces podría usar PHP para guardar la tasa que usa en los metadatos del archivo.