c++ - tamaño - redimensionar imagen online
Biblioteca de cambio de tamaño de imagen C/C++ más rápida (6)
Comentario de @Chris Becke:
"piense por un momento sobre esa afirmación. ¿Qué parte de hacerlo en un único paso (complicado) lo va a hacer más rápido? Las rutinas de decodificación de imágenes aún necesitan decodificar cada píxel para que las rutinas de filtro las filtren. "
Ese no es siempre el caso. Por ejemplo, al decodificar un archivo JPEG, puede pedirle a la biblioteca JPEG que le proporcione una imagen de 1/2, 1/4, 1/8 (o algo por el estilo, hace tiempo que no la he analizado en detalle) que puede sin necesidad de decodificar el detalle adicional, debido a la forma en que funciona JPEG. Puede ser mucho más rápido que una escala decodificada completa.
(Obviamente, es posible que necesite escalar un poco después si la imagen más pequeña no es del tamaño exacto que desea).
(Lo siento, solo puedo publicar esta respuesta como un comentario debido a que no tengo reputación. La primera vez que traté de publicar algo aquí. Si alguien quiere volver a publicar esto o algo similar como un comentario y eliminar mi respuesta, ¡siéntete libre!)
Estoy escribiendo una aplicación que necesita cambiar el tamaño de grandes cantidades de imágenes ... y estos son mis requisitos:
- C / C ++
- Soporte jpeg / png al menos
- Rápido
- Plataforma cruzada
Hasta ahora mis opciones son:
- OpenCV
- CImg
- ImageMagick
- GraphicsMagick (se dice que es rápido)
- Diablo
- GIL de Boost
- CxImage
- Imlib2 (se dice que es rápido)
- ¿Cualquier otro?
Todo esto haría el trabajo, pero estoy buscando el más rápido aquí, y no pude encontrar ningún punto de referencia en su desempeño.
Eche un vistazo a Intel IPP (Integrated Performance Primitives) (el enlace Wiki es mejor que el de Intel ...) también funciona en AMD y tiene funciones para cambiar el tamaño de las imágenes (bilineal, vecino más cercano, etc.) y funciona en Linux y Windows.
No es gratis (pero no va a romper el banco), pero es el más rápido que puedes encontrar.
Si IPP hace lo que necesita (por ejemplo, cambiar el tamaño de la función en la sección 12), entonces dudo que encuentre un código x86 significativamente más rápido en ningún otro lado. Sin embargo, tenga en cuenta que puede recurrir a "implementaciones de referencia" más lentas cuando se ejecuta en CPU AMD.
Si la CPU no cumple con los requisitos de rendimiento, puede considerar cambiar el tamaño de una GPU con OpenGL (la implementación más sencilla mediante el mapeo de texturas se beneficiaría de interpoladores de hardware, para un filtrado más complejo use el código de sombreado GLSL). La capacidad de la GPU para hacer este tipo de cosas unas cien veces más rápido que una CPU (dar o tomar un cero) debe sopesarse contra la transferencia de datos relativamente lenta hacia y desde la tarjeta (típicamente un gigabyte o dos por segundo) como máximo).
Si está buscando una fuente abierta, ¿qué tal FreeImage? Para cosas comerciales, utilizo Snowbound. Ambos son bastante rápidos y son capaces de diferentes formatos de imagen y algoritmos de cambio de tamaño.
Si estás buscando cosas gratis y quieres hacer las cosas rápidamente, intenta desarrollar un plugin compilado por Gimp C: esto es muy fácil, y creo que Gimp hace un buen trabajo al redimensionar:
Este puede no ser el más rápido para cambiar el tamaño, pero el más barato (gratis) y el más rápido para desarrollar .
Echa un vistazo allí .
Eche un vistazo a VIPS. Es el más rápido que he encontrado hasta ahora.