2

(多くの努力の末) 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
4

2 に答える 2