入力ストリーム(画像のzipファイル)を取得して、各ファイルを抽出しようとしています。ただし、保存する前に各画像の品質を下げる必要があります(品質が100未満の場合)。次のことを試しましたが、画像が圧縮されません。
public void UnZip(Stream inputStream, string destinationPath, int quality = 80) {
using (var zipStream = new ZipInputStream(inputStream)) {
ZipEntry entry;
while ((entry = zipStream.GetNextEntry()) != null) {
var directoryPath = Path.GetDirectoryName(destinationPath + Path.DirectorySeparatorChar + entry.Name);
var fullPath = directoryPath + Path.DirectorySeparatorChar + Path.GetFileName(entry.Name);
// Create the stream to unzip the file to
using (var stream = new MemoryStream()) {
// Write the zip stream to the stream
if (entry.Size != 0) {
var size = 2048;
var data = new byte[2048];
while (true) {
size = zipStream.Read(data, 0, data.Length);
if (size > 0)
stream.Write(data, 0, size);
else
break;
}
}
// Compress the image and save it to the stream
if (quality < 100)
using (var image = Image.FromStream(stream)) {
var info = ImageCodecInfo.GetImageEncoders();
var @params = new EncoderParameters(1);
@params.Param[0] = new EncoderParameter(Encoder.Quality, quality);
image.Save(stream, info[1], @params);
}
}
// Save the stream to disk
using (var fs = new FileStream(fullPath, FileMode.Create)) {
stream.WriteTo(fs);
}
}
}
}
}
誰かが私が間違っていることを私に見せてくれたら幸いです。また、コードが少し醜く成長しているので、それを片付けるためのアドバイスをいただければ幸いです。ありがとう