Aller au contenu


Photo

Enregistrement d'une image ?


  • Please log in to reply
5 réponses à ce sujet

#1 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 84 messages

Posté 05 août 2017 - 08:42

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


#2 Larme

Larme

    Broyeur de fèves

  • Artisan chocolatier
  • PipPipPipPipPipPip
  • 1 950 messages
  • LocationParis

Posté 05 août 2017 - 11:56

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).


Tant que vous avez des dents, mangez des pommes. Tant que vous avez de l'argent, croquez la Pomme.

#3 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 84 messages

Posté 05 août 2017 - 12:34

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.



#4 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 84 messages

Posté 06 août 2017 - 22:12

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" ????



#5 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 604 messages
  • LocationParis

Posté 06 août 2017 - 22:59

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://stackoverflo...ew-file#3213017


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#6 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 84 messages

Posté 07 août 2017 - 08:11

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)






0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)