Tengo que renderizar una imagen muy grande (> 50,000² píxel) con el cairo. Para hacer esto sin quedarse sin memoria, renderizo partes de la imagen (< 1,000² pixel) una tras otra y las fusiono más adelante.Grandes imágenes con el cairo
- Crear 1000x1000 superficie
- Traducir a la posición de la parte actual
- imagen Draw (llamando a las instrucciones de dibujo utilizando PyCairo)
- Render/Guarda la imagen en el archivo (cairo_surface_write_to_png)
- Repita con el siguiente parte
Como los algoritmos de recorte cairos son más rápidos que el mío, el paso tres dibuja toda la imagen, incluso si solo una parte es visible. La mayor parte de la CPU se usa en el Paso 3 (por python). La mayor parte de la memoria se usa en el Paso 4 (por cairo).
¿Hay alguna manera de acelerar las cosas? ¿Algo como esto?
- Crear 1000x1000 superficie
- imagen Draw
- mover todo a la posición de la parte actual
- Render/Guarda la imagen en el archivo
- Repetir 3 con parte siguiente
o
- Crear 50000x50000 superficie
- imagen Draw
- Render/guardar sólo la parte actual de la imagen en un archivo
- Repetir 3 con parte siguiente
Otro idioma no es una opción y tampoco resolvería el problema, pero write_to_png_stream es una buena idea. Gracias – defnull
De nada. Espero que funcione. –