を破損している私はここで間違っているかわからないので、私は全体のプロセスを説明しますデコード。このjavascriptライブラリは、base64でエンコードされた有効なcanvas
オブジェクトを返します。その後、私は$.ajax()
で画像を送信します。Djangoの画像は、文字列が
croppie_div.croppie('result', {
type: 'canvas',
size: 'original',
format: 'jpeg'
}).then(function(resp){
$.ajax({
url: "{% url 'recortar_carta_ajax' %}",
method: "POST",
data: {'csrfmiddlewaretoken': "{{ csrf_token }}", 'imagen': resp, 'carta_id': "{{ carta_magicpy.id }}"},
success: function(r){
alert(r)
},
error: function(r){
alert(r)
}
});
その後、私はそれをデコードし、ImageField
に保存し、ジャンゴでエンコードされた文字列を取得:
if request.is_ajax():
carta_id = request.POST.get("carta_id")
imagen_b64 = request.POST.get("imagen")
imagen_decodificada = base64.b64decode(imagen_b64)
carta_magicpy = CartaMagicPy.objects.get(id=carta_id)
imagen_django = ContentFile(imagen_decodificada, "imagen.jpeg")
carta_magicpy.imagen.save("imagen.jpeg", imagen_django, save=True)
保存した画像が破壊されています。ファイルブラウザで開こうとすると、エラーが表示されます。
Error interpreting JPEG image file (Not a JPEG file: starts with 0x75 0xab)
これをデバッグする方法はわかりません。どのようにエラーを見つけることができますか?どんな助言も役に立ちます。
これはモデルです:
def ubicar_magicpy(instance, filename):
# Para ubicar las imágenes de magicpy
path = "/".join([instance.grupo.nombre, "imagen.jpeg"])
return path
class CartaMagicPy(models.Model):
imagen = models.ImageField(null=True, upload_to=ubicar_magicpy)
:http://foliotek.github.io/Croppie/は、Croppieは、PNGなどを返します。これはJPEGとして読み込めない理由を説明しています。 PNG拡張子で保存するのはどうでしょうか? – raphv
こんにちは@raphv。私は今それをテストします。しかし、上記のコードが示すように、私は 'jpeg'のフォーマットを手動で定義します。 – alejoss
申し訳ありませんが、私は気づいていませんでした。結果ファイルが空でないかどうか教えてください。それが空であれば、base64と同じ "フレーバー"(例えばpythonのurlsafe_b64decodeとstandard_b64decode)を使用しようとしていることを確認する必要がありますhttps://docs.python.org/2/library/base64.html – raphv