0

webapp の作成はほぼ完了しました。バックエンドは Django を使用しています。このプロジェクトでは、ユーザーが自分の画像をアップロードし、CamanJS を使用して画像を調整できます。画像はさまざまなサイズ (5mp 以上) で、さまざまな色にすることができます。それを数字にすると、ユーザーはおよそ持っているかもしれません。クライアントごとに 60 枚の画像、場合によっては 1000 のクライアントが必要です。したがって、最悪のシナリオを想定して、各画像が約 3 MB であると仮定すると、

3x60 = 180mb for a client
1000x180 = 180.000mb or 180GB for all clients

私のアプリケーションはオンライン (おそらくパス上) であり、おそらく多くのユーザーがいることがわかっている場合、画像サイズを処理する最善の方法は何ですか? dataURL をデータベース (base64 形式) に保存した方がよいでしょうか。これにより、プロジェクトに必要な hd スペースのサイズが縮小されますか? 画像が最初の詳細を失わないことが重要であると言わざるを得ません。したがって、圧縮を適用する場合、画像の品質を低下させる必要はありません。最善の解決策は何だと思いますか?

4

2 に答える 2

0

Base64 でエンコードされた画像を保存するには、約 33% 多くのスペースが必要になります。元の 3 バイトの各チャンクは、Base64 エンコードでは 4 バイトとして表されます。画像が JPEG の場合、画質を損なうことなく意味のある追加の圧縮を得ることは期待できません。

JPEG 画像はすでに圧縮されています。可逆圧縮 (zip など) を追加すると、ファイルが大きくなる可能性が高いため、唯一の選択肢は、低品質の非可逆圧縮です。また、JPEG 画像を変更すると再度圧縮する必要があり、JPEG ファイルを再エンコードするたびに品質が多少低下することにも注意してください。画像に繰り返し調整を加えたい場合は、可逆圧縮形式 (PNG など) を使用するのが最善ですが、JPEG よりもはるかに大きなファイルになります。

その規模のイメージ サービスを提供する場合、最善の解決策は、イメージを通常のファイルとしてファイル システムに保存し、それらのファイルに必要なストレージ容量を実際に提供することです。画像をデータベースに保存してもパフォーマンスが向上するわけではなく、ファイル システム ストレージよりも多くのスペースが必要になることはほぼ間違いありません (おそらくそれほど多くはありません)。必要に応じて、ソリッド ステート ストレージ (フラッシュ ドライブ) や RAID アレイを使用することでパフォーマンスを向上させることができます (物理インフラストラクチャを使用している場合)。SaaS では、ストレージをあまり制御できませんが、サービス プロバイダーはすでにそのような戦略を採用している可能性があります。

SaaS サービスでユーザーごとに 60000 個の 5mpix 画像を保存するためのコストを削減する簡単な方法がわかりません。専用の物理インフラストラクチャに投資すると、そのコストが少し下がる可能性がありますが、独自のハードウェアを維持することにもコストがかかります。おそらく、提供しようとしているサービスの価格にストレージ コストを考慮する必要があります。

于 2014-04-07T07:51:10.157 に答える
0

最善の解決策は、保存する前に画像のサイズを小さくすることだと思います。

HD 写真は、サイズが非常に大きくなる場合があります。モニターのサイズよりもさらに大きい。したがって、保存する前にこれらの画像のサイズを小さくすると、かなりの量のスペースを節約できます。

たとえば、私のコンピューターには、サイズが 1.80 MB、サイズが 3212x2150 px の forest.jpg という写真があります。私のモニターのサイズは 1366x768 px です。ご覧のとおり、写真の幅は私のモニターの幅の 2 倍以上です。

そして、これが私がしたことです:

>>> from PIL import Image
>>> photo = "C:/users/weasel/desktop/forest.jpg"
>>> im = Image.open(photo)
>>> size = (1000, 1000)
>>> im.thumbnail(size, Image.ANTIALIAS) # thumbnail will maintain the aspect ratio
>>> out_photo = "C:/users/weasel/desktop/forest_resized.jpg"
>>> im.save(out_photo, 'JPEG', quality=85)

このようにして作成された新しい画像のサイズPILは 1000x669 px で、サイズは 203 KBです。このように発生した品質の低下は、人間の目では検出できないと思います。

于 2014-04-07T07:58:29.523 に答える