Enregistrement d'une image ?

PatyomPatyom Membre
août 2017 modifié dans API AppKit #1

Je n'ai, jusqu'à  présent, eu qu'à  enregistrer des fichiers textes sur mon Mac mais comment fait-on pour enregistrer des images(BMP, Png, Jpg, Tiff, etc ...).


 


J'ai récupérer quelques lignes pour lire et écrire des images mais c'est pour IOS :



import Foundation


// Lecture

func LireImage(fileName: String) -> NSObjectFileImage {

do {
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let filePath = documentsURL.appendingPathComponent("\(fileName).png").path
if FileManager.default.fileExists(atPath: filePath) {
return UIImage(contentsOfFile: filePath)
}

} catch { }

}


// Ecriture

func EcritureImage(image: String, fileName: String) {

do {
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileURL = documentsURL.appendingPathComponent("\(fileName).png")
if let pngImageData = UIImagePNGRepresentation(image) {
try pngImageData.write(to: fileURL, options: .atomic)
}

} catch { }

}

Je comprends mais bien entendu je n'ai pas les instructions Mac OS X et en plus je ne suis pas sûr de mon type de retour dans la fonction "lecture image"



func LireImage(fileName: String) -> NSObjectFileImage

Réponses

  • Je ne sais pas d'où tu sors ce code mais:
    func EcritureImage(image: String, fileName: String) suivi de let pngImageData = UIImagePNGRepresentation(image)


    Le compilateur ne te dit pas que tu devrais mettre une UIImage plutôt qu'un String là  ?


     


    func LireImage(fileName: String) -> NSObjectFileImage suivi de return UIImage(contentsOfFile: filePath)


    Le compilateur ne te dit qu'il attend en retour un NSObjectFileImage et qu'en réalité tu retournes un UIImage ?


     


    Sinon, il me semble que c'est pareil sous mac OS pratiquement, sauf qu'il faut remplacer les UI pas des NS en préfix de classe (il y a de légères nuances par la suite, mais en général les équivalent existes sur OS X).


  • PatyomPatyom Membre
    août 2017 modifié #3

    salut Larme,


     


    En fait, j'ai essayé d'adapter çà  :



    // Write

    do {
    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let fileURL = documentsURL.appendingPathComponent("\(fileName).png")
    if let pngImageData = UIImagePNGRepresentation(image) {
    try pngImageData.write(to: fileURL, options: .atomic)
    }
    } catch { }

    //Read

    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let filePath = documentsURL.appendingPathComponent("\(fileName).png").path
    if FileManager.default.fileExists(atPath: filePath) {
    return UIImage(contentsOfFile: filePath)
    }

    et j'ai voulu en faire une function pour l'utiliser.


     


    Pas très crédible ma modif.


  • Bonsoir,


    Je n'ai toujours pas réussi à  enregistrer mon image en fichier.


     


    Bon le "snapshot" c'est ok, mais la suite est très confuse, voilà  ce que j'ai écrit :



    // Ecriture de l'image en fichier
    let copieEcran = maVue.snapshot
    let filename: String = "EssaiEnregImage"


    do {
    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let fileURL = documentsURL.appendingPathComponent("\(filename).png")
    try copieEcran.write(to: fileURL, options: .atomic)

    }

    Bon j'ai bien l'image complète avec toutes ses lignes dans "copieEcran" mais après çà  pèche.


    Il ne me trouve pas de "write" pour "NSImage" ????


  • NSImage ne possédant pas de méthode write, cela ne risque pas de fonctionner.. Il faut créer une représentation bitmap dans un format de stockage pour l'écrire sur le disque. Dans le cas du code iOS que tu as tenté d'adapter la sauvegarde se fait avec un UIImagePNGRepresentation (une représentation du format graphique PNG, générée à  partir de l'UIImage).


     


    Vas regarder ce lien qui explique les choses et donne des exemples de code, pour les NSImages :


     


    https://stackoverflow.com/questions/3038820/how-to-save-a-nsimage-as-a-new-file#3213017

  • Bien Draken,


     


    cà  y est, l'enregistrement se fait bien, j'ai compris qu'il fallait d'abord créer une representation bitmap mais c'était l'écriture du code qui me posait problème. Je n'ai pas tout compris dans ce code mais avec la pratique çà  va rentrer.


     


    Dis-moi si je me trompe, pour enregistrer une image ayant subi des modifications ou ajouts il faut :


     


    1- Appeler ou Créer mon image dans un Rect


    2- Tracer les lignes dessus ce rectangle (et non pas dedans)


    3- Fusionner les différents "calques" avec un "snapshot"


    4- Transformer cette fusion en représentation bitmap


    5- Enregistrer le résultat avec un ".write" dans un fichier.


     


    et dans ce cas on ne peut plus faire de modification.


     


    C'est ce que je cherche à  faire, voilà 


     


    (Je ne me suis pas encore penché sur la représentation des textes avec orientations verticales)

Connectez-vous ou Inscrivez-vous pour répondre.