Projet

Général

Profil

Optimisations

Taille des fichiers

Ça se passe ici: UBSvgSubsetAdaptor.cpp

void UBSvgSubsetAdaptor::UBSvgSubsetWriter::pixmapItemToLinkedImage(UBGraphicsPixmapItem* pixmapItem)
{
    mXmlWriter.writeStartElement("image");

    /** Eric Seigne / RyXéo / AbulEdu : optimisation de taille de fichier
     *  1. si le fichier source est png on reste en png, mais si c'est un jpeg on reste aussi en jpeg
     *  2. si c'est un jpeg on regarde la taille qu'il fait sur le document et on le retaille
     *     (pas la peine de stocker un fichier en 8000x4000 s'il est affiché en 1280)
     **/
    QString fileName;
    QString exportFormat;
    if( pixmapItem->sourceUrl().toString().toLower().endsWith(".jpeg") || pixmapItem->sourceUrl().toString().toLower().endsWith(".jpg") ) {
        fileName = UBPersistenceManager::imageDirectory + "/" + pixmapItem->uuid().toString() + ".jpeg";
        exportFormat = "JPG";
    }
    else {
        fileName = UBPersistenceManager::imageDirectory + "/" + pixmapItem->uuid().toString() + ".png";
        exportFormat = "PNG";
    }

    QString path = mDocumentPath + "/" + fileName;

    if (!QFile::exists(path))
    {
        QDir dir;
        dir.mkdir(mDocumentPath + "/" + UBPersistenceManager::imageDirectory);

        qDebug() << "ES: Sauvegarde 2 de " << pixmapItem->boundingRect() << " vers " << fileName;
        if(exportFormat == "JPG") {
            //On recupere la taille de l'objet pour retailler le fichier en consequence
            //item->boundingRect() + transformation matrix (à faire, le poc est ici)
            QPixmap p = pixmapItem->pixmap().scaledToWidth(pixmapItem->boundingRect().width(),Qt::SmoothTransformation);
            p.save(path, exportFormat.toLocal8Bit());
        }
        else {
            pixmapItem->pixmap().toImage().save(path, exportFormat.toLocal8Bit());
        }
    }

    mXmlWriter.writeAttribute(nsXLink, "href", fileName);

    writeAction(pixmapItem->Delegate()->action());
    graphicsItemToSvg(pixmapItem);

    mXmlWriter.writeEndElement();
}

Redmine Appliance - Powered by TurnKey Linux