Source code for sec_interp.exporters.image_exporter

from __future__ import annotations

"""Image exporter module for raster formats (PNG, JPG)."""

from pathlib import Path

from qgis.core import QgsMapRendererCustomPainterJob, QgsMapSettings
from qgis.PyQt.QtCore import QRectF, QSize
from qgis.PyQt.QtGui import QColor, QImage, QPainter

from sec_interp.logger_config import get_logger

from .base_exporter import BaseExporter

logger = get_logger(__name__)


[docs] class ImageExporter(BaseExporter): """Exporter for raster image formats (PNG, JPG, JPEG)."""
[docs] def get_supported_extensions(self) -> list[str]: """Get supported image extensions.""" return [".png", ".jpg", ".jpeg"]
[docs] def export(self, output_path: Path, map_settings: QgsMapSettings) -> bool: """Export map to raster image. Args: output_path: Output file path map_settings: QgsMapSettings instance configured for rendering Returns: True if export successful, False otherwise """ try: width = self.get_setting("width", 800) height = self.get_setting("height", 600) background_color = self.get_setting("background_color", QColor(255, 255, 255)) # Create image image = QImage(QSize(width, height), QImage.Format_ARGB32) image.fill(background_color) # Setup painter painter = QPainter(image) painter.setRenderHint(QPainter.Antialiasing) painter.setRenderHint(QPainter.SmoothPixmapTransform) # Render map job = QgsMapRendererCustomPainterJob(map_settings, painter) job.start() job.waitForFinished() # Draw legend if available show_legend = self.get_setting("show_legend", True) legend_renderer = self.get_setting("legend_renderer") if legend_renderer and show_legend: legend_renderer.draw_legend(painter, QRectF(0, 0, width, height)) painter.end() # Save image return image.save(str(output_path)) except Exception: logger.exception(f"Image export failed for {output_path}") return False