2017-04-21 3 views
-1

J'ai tableau d'octets d'une image, je veux créer un fichier Zip à partir d'elle.Comment faire pour compresser un flux mémoire d'une image

Je peux enregistrer le tableau d'octets dans le fichier jpg avec succès, Mais quand je crée un fichier zip, l'image du fichier zip (l'image qui est dans le fichier zip) a été endommagé et je ne peux pas l'ouvrir! (lorsque je tente d'ouvrir l'image, un message d'erreur d'affichage Winrar ci-dessous: D: \ sample.zip: L'archive est soit en format inconnu ou endommagé )

Note: Mon image est en mémoire et je n » Je veux créer un fichier d'image physique.

Voici mes codes:

private void Zip(byte[] imageBytes) 
{ 
    string filePath = string.Empty; 
    using (var ms = new MemoryStream()) 
    using (var zip = new ZipArchive(ms, ZipArchiveMode.Create)) 
    { 
     var entry = zip.CreateEntry("sample.jpg", CompressionLevel.Optimal); 

     using (var entryStream = entry.Open()) 
     using (var fileToCompressStream = new MemoryStream(imageBytes)) 
     { 
      fileToCompressStream.CopyTo(entryStream); 
     } 

     using (var fs = new FileStream(baseFilePath + "sample.zip", FileMode.Create)) 
     { 
      ms.Position = 0; 
      ms.WriteTo(fs); 
     } 
    } 
} 
+0

Je crée aussi nouvelle instance Bitmap de imageBytes (paramètres) et l'enregistrer dans entryStream, mais même question ! – Moradof

Répondre

0

Vous devriez être en mesure de le faire:

using System.IO; 
using System.IO.Compression; 
using System.Text; 

private void Zip (byte[] imageBytes) { 

string fileName = baseFilePath + "sample.zip"; 
using (FileStream f2 = new FileStream(fileName, FileMode.Create)){ 
     using (GZipStream gz = new GZipStream(f2, CompressionMode.Compress, false)) 
     { 
      gz.Write(imageBytes, 0, imageBytes.Length); 
     } 
    } 
} 
+0

Cela fonctionne très bien. Merci. comment puis-je définir le nom du fichier image? (Il enregistre avec le même nom de fichier zip sans aucune extension) – Moradof

+0

Je pense, GZip n'est pas bon pour ma situation parce que j'ai besoin de mettre plusieurs images dans un fichier zip finalement et pour autant que je sache, GZipStream est bon pour le zip fichier. Ai-je raison ? – Moradof

+0

Vous êtes correct lire ici pour savoir comment faire plusieurs fichiers: http://stackoverflow.com/questions/24571773/how-do-i-zip-multiple-files-using-gzipstream-in-c-sharp – Avitus