C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

FileStreamを使わない圧縮、解凍について教えて下さい [1]

[トピック内 22 記事 (21 - 22 表示)]  << 0 | 1 >>

■99996 / inTopicNo.21)  Re[11]: FileStreamを使わない圧縮、解凍について教えて下さい
  
□投稿者/ さや (12回)-(2022/06/28(Tue) 10:40:51)
アドバイスいただきありがとうございました。
解決済み
引用返信 編集キー/
■99999 / inTopicNo.22)  Re[9]: FileStreamを使わない圧縮、解凍について教えて下さい
□投稿者/ 魔界の仮面弁士 (3417回)-(2022/06/28(Tue) 12:00:51)
解決済みマークはつけたままにしておきます。

No99994 (さや さん) に返信
>>調べてみたら、わざわざ書かなくとも既存の C# 実装が多数あるようで…。
> 自分で調べても見つけられず、唯一見つけられたのがLZMA SDKだったのでそれを使ってどうにかしようと思っていました。

LZMA 自体は悪い選択ではないと思いますが、
LZMA SDK に限定する必要が無いのであれば、ソースを読み解かずとも
nuget するだければ利用できるライブラリが幾つかあります。要件を満たすかどうかは別として。
(そのうちのいくつかは、内部的には LZMA SDK の実装を含むものもありますが)

一方、 No99989 で紹介したものはすべて LZMA SDK を必要とするものです。
LZMA SDK で提供されているメソッドは、いわゆる「低水準 API」だけなので
先ほど紹介した SevenZipHelper.cs などで、使いやすくラッピングしているわけです。

ただしいずれの場合も、CoderPropID で指定する LZMA properties などは、
必要に応じて調整してあげる必要があるかもしれません。

たとえば No99987 では CoderPropID.DictionarySize を 8MB (1<<23) としていますが、
No99989 の SevenZip.Helper.Compress では 2MB (1<<21) 設定となっていますね。

LzmaAlone の場合は、コマンドラインから 「-d0」〜「-d23」の
オプションで調整できるように設計されているようです。


No99993 (さや さん) に返信
> 最終目的はQRコードを読み込みそれをエンコード・デコードするということになります。
QR って、あまり大きい情報は保持できないですよ?

最大サイズとなるバージョン 40 (縦横 177 セル)の 訂正レベル L の場合で
 バイナリのみの場合→2,953バイト
 英数字のみの場合→4,296文字
までしか保持できません。

一方音声データについては、たとえば、3秒程度の音を MP3 に変換した場合、
ビットレートが 128kbps だとおよそ 48KB 前後、8kbps で 3KB は必要です。

画像や音声は、ローカルディスクやクラウドストレージに置いておいて、
QR はそこの場所を示すマーカーとして使うだけならば問題ないですが、
QR 内に音声まで含めるとすれば、複数の QR を並べて配置しないと無理かも。

あるいは QR コードではなくカメレオンコードにすれば情報量を増やせるかな。


No99973 (さや さん) に返信
> テキストだけでなく画像や音声も圧縮したいという希望があるのですが、
> その場合はバイナリデータで受け取るということになるのでしょうか?

LZMA SDK 単体では、画像や音声の圧縮には向かないと思います。

画像や音声は、それ自体が既に圧縮済みであることが多いため、
再圧縮の効果が薄いです。無圧縮データならもちろん小さくできますが、
高圧縮データの場合、再圧縮すると、むしろ肥大化することさえあります。

ですから、入力元が圧縮済みの画像や音声データなら、LZMA 等は気にせず、
再圧縮せずに生データそのままで保持する形でも良いのではないでしょうか。

より軽量化したいのであれば、データに応じた圧縮方式を検討してください。
テキストデータならば可逆圧縮一択ですが、
画像や音声だと不可逆的圧縮でも良いケースがあります。
JPEG や MP3 は不可逆、PNG や FLAC は可逆です。
https://breezegroup.co.jp/202005/image-compression/
https://service.plan-b.co.jp/blog/tech/10282/

不可逆で良い場合は、画質音質次第でデータ量が変わってくるので、
どこまでの劣化を許すのかという点を考慮した上で、
フォーマットを選択しましょう。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ