(多くの努力の末) django-imagekitをインストールすることができ、アップロードされた画像のファイル サイズを圧縮するためにdjango-imagekitを使用できるようになりました。
私は 6MB の画像をアップロードすることができ、品質 10 を使用すると、django-imagekitは画像を 230KB に圧縮します (以下を参照)。
アップロードされた画像のサイズが 300Kb、1MB、2MB、3MB 以上の場合、別のファイル圧縮を使用する方法はありますか (django-imagekit はこれを品質と呼びます)。画像のサイズを確認し、画像のサイズ (KB) が大きいほど低い品質を適用しますか? 10 のファイル圧縮は、大きなサイズの画像には適していますが、25Kb などの小さなサイズの画像の場合、画像の品質が大幅に低下します。
コードをどのように記述し、これを実現するコードをどこに配置するかさえわかりません。そのため、どんな助けもいただければ幸いです。
関連するmodels.pyファイルコードは次のとおりです。
from imagekit.processors import Adjust, ResizeToFill
from imagekit.models import ProcessedImageField
class NameDetails(models.Model, FillableModelWithLanguageVersion):
user = models.ForeignKey(User)
....
#name_details_photograph = models.ImageField(upload_to=_get_name_details_photograph_upload_location, null=True, blank=True)
name_details_photograph = ProcessedImageField(upload_to=_get_name_details_photograph_upload_location, null=True, blank=True, options={'quality': 25}, processors=[Adjust(sharpness=1.1),])
....
def __unicode__(self):
return unicode(self.user)
編集:
ProcessedImageField クラスのフォーム フィールド バージョンを実装しようとしましたが、画像がアップロードされません。
models.py コードを画像フィールドに戻すときに試したフォーム コードは次のとおりです (上記でコメントアウトされています)。
from imagekit.forms import ProcessedImageField
from imagekit.processors import Adjust, ResizeToFill
class NameDetailsForm(forms.ModelForm):
def __init__(self, available_languages, language_preference, file_required, *args, **kwargs):
"""
available_languages should be a valid choices list
"""
super(NameDetailsForm, self).__init__(*args, **kwargs)
self.fields['language_code'] = forms.ChoiceField(choices=available_languages, initial=language_preference, label=_('Language'),)
#self.fields['name_details_photograph'] = forms.FileField(label=_('Photograph'), required=file_required)
self.fields['name_details_photograph'] = ProcessedImageField(label=_('Photograph'), required=file_required, spec_id='myapp:profile:name_details_photograph', options={'quality': 25}, processors=[Adjust(sharpness=1.1),])
class Meta:
model = NameDetails