Django Resize image in Forms
I'm using python 3.6 and Django 2.0.
I have a square image that I want uploaded to a model. I currently have an image field in a model that I can upload.
avatar = models.ImageField(path_and_rename, max_length=255, blank=True
I want to resize whatever square image is uploaded to be 750 by 750. I thought of a way to do it, but I don't think I'm saving it as the right type as it is giving me an error.
'Image' object has no attribute '_committed'
How can I resize my square image to meet the new dimensions that I need.
My code (leaving out validation to make it simpler):
forms.py
def clean_avatar(self):
avatar = self.cleaned_data['avatar']
try:
print(len(avatar))
w, h = get_image_dimensions(avatar)
max_width = max_height = 750
image = Image.open(avatar)
resized_image = image.resize((max_width,max_height), Image.ANTIALIAS)
print(type(avatar))
print(type(image))
print(type(resized_image))
return resized_image
except
...
the output of the above is
<class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
<class 'PIL.JpegImagePlugin.JpegImageFile'>
<class 'PIL.Image.Image'>
if I return avatar
it works, but it doesnt' work when I return resized_image
. How can I make the datatype of resized_image
that of avatar
?
Full error message:
File "C:myapplibsite-packagesdjangocorehandlersexception.py" in inner
35. response = get_response(request)
File "C:myapplibsite-packagesdjangocorehandlersbase.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "C:myapplibsite-packagesdjangocorehandlersbase.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericbase.py" in view
69. return self.dispatch(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangocontribauthmixins.py" in dispatch
52. return super().dispatch(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericbase.py" in dispatch
89. return handler(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericedit.py" in post
194. return super().post(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericedit.py" in post
142. return self.form_valid(form)
File "C:myapplibsite-packagesdjangoviewsgenericedit.py" in form_valid
125. self.object = form.save()
File "C:myapplibsite-packagesdjangoformsmodels.py" in save
456. self.instance.save()
File "C:myapplibsite-packagesdjangocontribauthbase_user.py" in save
73. super().save(*args, **kwargs)
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in save
729. force_update=force_update, update_fields=update_fields)
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in save_base
759. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in _save_table
820. for f in non_pks]
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in <listcomp>
820. for f in non_pks]
File "C:myapplibsite-packagesdjangodbmodelsfieldsfiles.py" in pre_save
285. if file and not file._committed:
Exception Type: AttributeError at /account/details/
Exception Value: 'Image' object has no attribute '_committed'
django resize python-imaging-library
add a comment |
I'm using python 3.6 and Django 2.0.
I have a square image that I want uploaded to a model. I currently have an image field in a model that I can upload.
avatar = models.ImageField(path_and_rename, max_length=255, blank=True
I want to resize whatever square image is uploaded to be 750 by 750. I thought of a way to do it, but I don't think I'm saving it as the right type as it is giving me an error.
'Image' object has no attribute '_committed'
How can I resize my square image to meet the new dimensions that I need.
My code (leaving out validation to make it simpler):
forms.py
def clean_avatar(self):
avatar = self.cleaned_data['avatar']
try:
print(len(avatar))
w, h = get_image_dimensions(avatar)
max_width = max_height = 750
image = Image.open(avatar)
resized_image = image.resize((max_width,max_height), Image.ANTIALIAS)
print(type(avatar))
print(type(image))
print(type(resized_image))
return resized_image
except
...
the output of the above is
<class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
<class 'PIL.JpegImagePlugin.JpegImageFile'>
<class 'PIL.Image.Image'>
if I return avatar
it works, but it doesnt' work when I return resized_image
. How can I make the datatype of resized_image
that of avatar
?
Full error message:
File "C:myapplibsite-packagesdjangocorehandlersexception.py" in inner
35. response = get_response(request)
File "C:myapplibsite-packagesdjangocorehandlersbase.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "C:myapplibsite-packagesdjangocorehandlersbase.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericbase.py" in view
69. return self.dispatch(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangocontribauthmixins.py" in dispatch
52. return super().dispatch(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericbase.py" in dispatch
89. return handler(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericedit.py" in post
194. return super().post(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericedit.py" in post
142. return self.form_valid(form)
File "C:myapplibsite-packagesdjangoviewsgenericedit.py" in form_valid
125. self.object = form.save()
File "C:myapplibsite-packagesdjangoformsmodels.py" in save
456. self.instance.save()
File "C:myapplibsite-packagesdjangocontribauthbase_user.py" in save
73. super().save(*args, **kwargs)
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in save
729. force_update=force_update, update_fields=update_fields)
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in save_base
759. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in _save_table
820. for f in non_pks]
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in <listcomp>
820. for f in non_pks]
File "C:myapplibsite-packagesdjangodbmodelsfieldsfiles.py" in pre_save
285. if file and not file._committed:
Exception Type: AttributeError at /account/details/
Exception Value: 'Image' object has no attribute '_committed'
django resize python-imaging-library
DO you want to resize image automatically or you want to give user the option which part of the image they want to choose?
– Bidhan Majhi
Nov 21 '18 at 5:41
Image.open
returns aPIL.Image.Image
object from (presumably) astr
object which is a file name. What you probably need is to create a file using.save
with a suitablestr
as a temporary name and then pass that.
– Kapil
Nov 21 '18 at 5:42
@BidhanMajhi I have some react code that will let the user crop the photo as they desire. Then I want to have them upload it where it will then be resized.
– Micah Pearce
Nov 21 '18 at 5:45
@Kapil do I save it in the forms section or do I save else (the view?)
– Micah Pearce
Nov 21 '18 at 5:46
add a comment |
I'm using python 3.6 and Django 2.0.
I have a square image that I want uploaded to a model. I currently have an image field in a model that I can upload.
avatar = models.ImageField(path_and_rename, max_length=255, blank=True
I want to resize whatever square image is uploaded to be 750 by 750. I thought of a way to do it, but I don't think I'm saving it as the right type as it is giving me an error.
'Image' object has no attribute '_committed'
How can I resize my square image to meet the new dimensions that I need.
My code (leaving out validation to make it simpler):
forms.py
def clean_avatar(self):
avatar = self.cleaned_data['avatar']
try:
print(len(avatar))
w, h = get_image_dimensions(avatar)
max_width = max_height = 750
image = Image.open(avatar)
resized_image = image.resize((max_width,max_height), Image.ANTIALIAS)
print(type(avatar))
print(type(image))
print(type(resized_image))
return resized_image
except
...
the output of the above is
<class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
<class 'PIL.JpegImagePlugin.JpegImageFile'>
<class 'PIL.Image.Image'>
if I return avatar
it works, but it doesnt' work when I return resized_image
. How can I make the datatype of resized_image
that of avatar
?
Full error message:
File "C:myapplibsite-packagesdjangocorehandlersexception.py" in inner
35. response = get_response(request)
File "C:myapplibsite-packagesdjangocorehandlersbase.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "C:myapplibsite-packagesdjangocorehandlersbase.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericbase.py" in view
69. return self.dispatch(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangocontribauthmixins.py" in dispatch
52. return super().dispatch(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericbase.py" in dispatch
89. return handler(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericedit.py" in post
194. return super().post(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericedit.py" in post
142. return self.form_valid(form)
File "C:myapplibsite-packagesdjangoviewsgenericedit.py" in form_valid
125. self.object = form.save()
File "C:myapplibsite-packagesdjangoformsmodels.py" in save
456. self.instance.save()
File "C:myapplibsite-packagesdjangocontribauthbase_user.py" in save
73. super().save(*args, **kwargs)
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in save
729. force_update=force_update, update_fields=update_fields)
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in save_base
759. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in _save_table
820. for f in non_pks]
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in <listcomp>
820. for f in non_pks]
File "C:myapplibsite-packagesdjangodbmodelsfieldsfiles.py" in pre_save
285. if file and not file._committed:
Exception Type: AttributeError at /account/details/
Exception Value: 'Image' object has no attribute '_committed'
django resize python-imaging-library
I'm using python 3.6 and Django 2.0.
I have a square image that I want uploaded to a model. I currently have an image field in a model that I can upload.
avatar = models.ImageField(path_and_rename, max_length=255, blank=True
I want to resize whatever square image is uploaded to be 750 by 750. I thought of a way to do it, but I don't think I'm saving it as the right type as it is giving me an error.
'Image' object has no attribute '_committed'
How can I resize my square image to meet the new dimensions that I need.
My code (leaving out validation to make it simpler):
forms.py
def clean_avatar(self):
avatar = self.cleaned_data['avatar']
try:
print(len(avatar))
w, h = get_image_dimensions(avatar)
max_width = max_height = 750
image = Image.open(avatar)
resized_image = image.resize((max_width,max_height), Image.ANTIALIAS)
print(type(avatar))
print(type(image))
print(type(resized_image))
return resized_image
except
...
the output of the above is
<class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
<class 'PIL.JpegImagePlugin.JpegImageFile'>
<class 'PIL.Image.Image'>
if I return avatar
it works, but it doesnt' work when I return resized_image
. How can I make the datatype of resized_image
that of avatar
?
Full error message:
File "C:myapplibsite-packagesdjangocorehandlersexception.py" in inner
35. response = get_response(request)
File "C:myapplibsite-packagesdjangocorehandlersbase.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "C:myapplibsite-packagesdjangocorehandlersbase.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericbase.py" in view
69. return self.dispatch(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangocontribauthmixins.py" in dispatch
52. return super().dispatch(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericbase.py" in dispatch
89. return handler(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericedit.py" in post
194. return super().post(request, *args, **kwargs)
File "C:myapplibsite-packagesdjangoviewsgenericedit.py" in post
142. return self.form_valid(form)
File "C:myapplibsite-packagesdjangoviewsgenericedit.py" in form_valid
125. self.object = form.save()
File "C:myapplibsite-packagesdjangoformsmodels.py" in save
456. self.instance.save()
File "C:myapplibsite-packagesdjangocontribauthbase_user.py" in save
73. super().save(*args, **kwargs)
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in save
729. force_update=force_update, update_fields=update_fields)
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in save_base
759. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in _save_table
820. for f in non_pks]
File "C:myapplibsite-packagesdjangodbmodelsbase.py" in <listcomp>
820. for f in non_pks]
File "C:myapplibsite-packagesdjangodbmodelsfieldsfiles.py" in pre_save
285. if file and not file._committed:
Exception Type: AttributeError at /account/details/
Exception Value: 'Image' object has no attribute '_committed'
django resize python-imaging-library
django resize python-imaging-library
asked Nov 21 '18 at 5:29
Micah PearceMicah Pearce
397411
397411
DO you want to resize image automatically or you want to give user the option which part of the image they want to choose?
– Bidhan Majhi
Nov 21 '18 at 5:41
Image.open
returns aPIL.Image.Image
object from (presumably) astr
object which is a file name. What you probably need is to create a file using.save
with a suitablestr
as a temporary name and then pass that.
– Kapil
Nov 21 '18 at 5:42
@BidhanMajhi I have some react code that will let the user crop the photo as they desire. Then I want to have them upload it where it will then be resized.
– Micah Pearce
Nov 21 '18 at 5:45
@Kapil do I save it in the forms section or do I save else (the view?)
– Micah Pearce
Nov 21 '18 at 5:46
add a comment |
DO you want to resize image automatically or you want to give user the option which part of the image they want to choose?
– Bidhan Majhi
Nov 21 '18 at 5:41
Image.open
returns aPIL.Image.Image
object from (presumably) astr
object which is a file name. What you probably need is to create a file using.save
with a suitablestr
as a temporary name and then pass that.
– Kapil
Nov 21 '18 at 5:42
@BidhanMajhi I have some react code that will let the user crop the photo as they desire. Then I want to have them upload it where it will then be resized.
– Micah Pearce
Nov 21 '18 at 5:45
@Kapil do I save it in the forms section or do I save else (the view?)
– Micah Pearce
Nov 21 '18 at 5:46
DO you want to resize image automatically or you want to give user the option which part of the image they want to choose?
– Bidhan Majhi
Nov 21 '18 at 5:41
DO you want to resize image automatically or you want to give user the option which part of the image they want to choose?
– Bidhan Majhi
Nov 21 '18 at 5:41
Image.open
returns a PIL.Image.Image
object from (presumably) a str
object which is a file name. What you probably need is to create a file using .save
with a suitable str
as a temporary name and then pass that.– Kapil
Nov 21 '18 at 5:42
Image.open
returns a PIL.Image.Image
object from (presumably) a str
object which is a file name. What you probably need is to create a file using .save
with a suitable str
as a temporary name and then pass that.– Kapil
Nov 21 '18 at 5:42
@BidhanMajhi I have some react code that will let the user crop the photo as they desire. Then I want to have them upload it where it will then be resized.
– Micah Pearce
Nov 21 '18 at 5:45
@BidhanMajhi I have some react code that will let the user crop the photo as they desire. Then I want to have them upload it where it will then be resized.
– Micah Pearce
Nov 21 '18 at 5:45
@Kapil do I save it in the forms section or do I save else (the view?)
– Micah Pearce
Nov 21 '18 at 5:46
@Kapil do I save it in the forms section or do I save else (the view?)
– Micah Pearce
Nov 21 '18 at 5:46
add a comment |
1 Answer
1
active
oldest
votes
I have done simillar thing, but not in forms. My approach was like this:
# override Model Save Method
class YourModel(models.Model):
...
def save(self, **kwargs):
resize = kwargs.pop('resize', False)
instance = super(YourModel, self).save(**kwargs)
if resize:
pil_image = Image.open(self.avatar.path)
# resize related code
resized_image = pil_image.resize((max_width,max_height), Image.ANTIALIAS)
resized_image.save(self.avatar.path)
return instance
And call this save method from form like this:
class YourForm(...):
...
def save(self, commit=True):
instance = super(YourForm, self).save(commit=False)
instance.save(resize=True) # call model save method from here
return instance
Update
Maybe you can try like this:
import io
# clean method
w, h = get_image_dimensions(avatar)
max_width = max_height = 750
image = Image.open(avatar)
resized_image = image.resize((max_width,max_height), Image.ANTIALIAS)
img_in_memory = io.BytesIO()
resized_image.save(img_in_memory, format="png")
return img_in_memory
I tried this and for this linepil_image = Image.open(self.avatar.path)
I got an error message -this back end doesn't support absolute paths
. I'm using s3 to save my files. Gonna look into this tomorrow.
– Micah Pearce
Nov 21 '18 at 6:41
I saw another post say to change it to self.avatar.name, but when I do it says that the file doesn't exist (cause I haven't saved it yet). Confusing.
– Micah Pearce
Nov 21 '18 at 6:50
@MicahPearce please see my answer's update section. Hope it helps!!
– ruddra
Nov 21 '18 at 7:54
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53405755%2fdjango-resize-image-in-forms%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I have done simillar thing, but not in forms. My approach was like this:
# override Model Save Method
class YourModel(models.Model):
...
def save(self, **kwargs):
resize = kwargs.pop('resize', False)
instance = super(YourModel, self).save(**kwargs)
if resize:
pil_image = Image.open(self.avatar.path)
# resize related code
resized_image = pil_image.resize((max_width,max_height), Image.ANTIALIAS)
resized_image.save(self.avatar.path)
return instance
And call this save method from form like this:
class YourForm(...):
...
def save(self, commit=True):
instance = super(YourForm, self).save(commit=False)
instance.save(resize=True) # call model save method from here
return instance
Update
Maybe you can try like this:
import io
# clean method
w, h = get_image_dimensions(avatar)
max_width = max_height = 750
image = Image.open(avatar)
resized_image = image.resize((max_width,max_height), Image.ANTIALIAS)
img_in_memory = io.BytesIO()
resized_image.save(img_in_memory, format="png")
return img_in_memory
I tried this and for this linepil_image = Image.open(self.avatar.path)
I got an error message -this back end doesn't support absolute paths
. I'm using s3 to save my files. Gonna look into this tomorrow.
– Micah Pearce
Nov 21 '18 at 6:41
I saw another post say to change it to self.avatar.name, but when I do it says that the file doesn't exist (cause I haven't saved it yet). Confusing.
– Micah Pearce
Nov 21 '18 at 6:50
@MicahPearce please see my answer's update section. Hope it helps!!
– ruddra
Nov 21 '18 at 7:54
add a comment |
I have done simillar thing, but not in forms. My approach was like this:
# override Model Save Method
class YourModel(models.Model):
...
def save(self, **kwargs):
resize = kwargs.pop('resize', False)
instance = super(YourModel, self).save(**kwargs)
if resize:
pil_image = Image.open(self.avatar.path)
# resize related code
resized_image = pil_image.resize((max_width,max_height), Image.ANTIALIAS)
resized_image.save(self.avatar.path)
return instance
And call this save method from form like this:
class YourForm(...):
...
def save(self, commit=True):
instance = super(YourForm, self).save(commit=False)
instance.save(resize=True) # call model save method from here
return instance
Update
Maybe you can try like this:
import io
# clean method
w, h = get_image_dimensions(avatar)
max_width = max_height = 750
image = Image.open(avatar)
resized_image = image.resize((max_width,max_height), Image.ANTIALIAS)
img_in_memory = io.BytesIO()
resized_image.save(img_in_memory, format="png")
return img_in_memory
I tried this and for this linepil_image = Image.open(self.avatar.path)
I got an error message -this back end doesn't support absolute paths
. I'm using s3 to save my files. Gonna look into this tomorrow.
– Micah Pearce
Nov 21 '18 at 6:41
I saw another post say to change it to self.avatar.name, but when I do it says that the file doesn't exist (cause I haven't saved it yet). Confusing.
– Micah Pearce
Nov 21 '18 at 6:50
@MicahPearce please see my answer's update section. Hope it helps!!
– ruddra
Nov 21 '18 at 7:54
add a comment |
I have done simillar thing, but not in forms. My approach was like this:
# override Model Save Method
class YourModel(models.Model):
...
def save(self, **kwargs):
resize = kwargs.pop('resize', False)
instance = super(YourModel, self).save(**kwargs)
if resize:
pil_image = Image.open(self.avatar.path)
# resize related code
resized_image = pil_image.resize((max_width,max_height), Image.ANTIALIAS)
resized_image.save(self.avatar.path)
return instance
And call this save method from form like this:
class YourForm(...):
...
def save(self, commit=True):
instance = super(YourForm, self).save(commit=False)
instance.save(resize=True) # call model save method from here
return instance
Update
Maybe you can try like this:
import io
# clean method
w, h = get_image_dimensions(avatar)
max_width = max_height = 750
image = Image.open(avatar)
resized_image = image.resize((max_width,max_height), Image.ANTIALIAS)
img_in_memory = io.BytesIO()
resized_image.save(img_in_memory, format="png")
return img_in_memory
I have done simillar thing, but not in forms. My approach was like this:
# override Model Save Method
class YourModel(models.Model):
...
def save(self, **kwargs):
resize = kwargs.pop('resize', False)
instance = super(YourModel, self).save(**kwargs)
if resize:
pil_image = Image.open(self.avatar.path)
# resize related code
resized_image = pil_image.resize((max_width,max_height), Image.ANTIALIAS)
resized_image.save(self.avatar.path)
return instance
And call this save method from form like this:
class YourForm(...):
...
def save(self, commit=True):
instance = super(YourForm, self).save(commit=False)
instance.save(resize=True) # call model save method from here
return instance
Update
Maybe you can try like this:
import io
# clean method
w, h = get_image_dimensions(avatar)
max_width = max_height = 750
image = Image.open(avatar)
resized_image = image.resize((max_width,max_height), Image.ANTIALIAS)
img_in_memory = io.BytesIO()
resized_image.save(img_in_memory, format="png")
return img_in_memory
edited Nov 21 '18 at 7:54
answered Nov 21 '18 at 5:48
ruddraruddra
12.2k32648
12.2k32648
I tried this and for this linepil_image = Image.open(self.avatar.path)
I got an error message -this back end doesn't support absolute paths
. I'm using s3 to save my files. Gonna look into this tomorrow.
– Micah Pearce
Nov 21 '18 at 6:41
I saw another post say to change it to self.avatar.name, but when I do it says that the file doesn't exist (cause I haven't saved it yet). Confusing.
– Micah Pearce
Nov 21 '18 at 6:50
@MicahPearce please see my answer's update section. Hope it helps!!
– ruddra
Nov 21 '18 at 7:54
add a comment |
I tried this and for this linepil_image = Image.open(self.avatar.path)
I got an error message -this back end doesn't support absolute paths
. I'm using s3 to save my files. Gonna look into this tomorrow.
– Micah Pearce
Nov 21 '18 at 6:41
I saw another post say to change it to self.avatar.name, but when I do it says that the file doesn't exist (cause I haven't saved it yet). Confusing.
– Micah Pearce
Nov 21 '18 at 6:50
@MicahPearce please see my answer's update section. Hope it helps!!
– ruddra
Nov 21 '18 at 7:54
I tried this and for this line
pil_image = Image.open(self.avatar.path)
I got an error message - this back end doesn't support absolute paths
. I'm using s3 to save my files. Gonna look into this tomorrow.– Micah Pearce
Nov 21 '18 at 6:41
I tried this and for this line
pil_image = Image.open(self.avatar.path)
I got an error message - this back end doesn't support absolute paths
. I'm using s3 to save my files. Gonna look into this tomorrow.– Micah Pearce
Nov 21 '18 at 6:41
I saw another post say to change it to self.avatar.name, but when I do it says that the file doesn't exist (cause I haven't saved it yet). Confusing.
– Micah Pearce
Nov 21 '18 at 6:50
I saw another post say to change it to self.avatar.name, but when I do it says that the file doesn't exist (cause I haven't saved it yet). Confusing.
– Micah Pearce
Nov 21 '18 at 6:50
@MicahPearce please see my answer's update section. Hope it helps!!
– ruddra
Nov 21 '18 at 7:54
@MicahPearce please see my answer's update section. Hope it helps!!
– ruddra
Nov 21 '18 at 7:54
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53405755%2fdjango-resize-image-in-forms%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
DO you want to resize image automatically or you want to give user the option which part of the image they want to choose?
– Bidhan Majhi
Nov 21 '18 at 5:41
Image.open
returns aPIL.Image.Image
object from (presumably) astr
object which is a file name. What you probably need is to create a file using.save
with a suitablestr
as a temporary name and then pass that.– Kapil
Nov 21 '18 at 5:42
@BidhanMajhi I have some react code that will let the user crop the photo as they desire. Then I want to have them upload it where it will then be resized.
– Micah Pearce
Nov 21 '18 at 5:45
@Kapil do I save it in the forms section or do I save else (the view?)
– Micah Pearce
Nov 21 '18 at 5:46