- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图在上传到我的 django
应用程序之前压缩图像文件。
我找到了不错的代码片段网站:https://djangosnippets.org/snippets/10460/
但它在 python3
中不起作用。我认为问题出在 str
或 byte
上。
有人建议使用 BytesIO
而不是 StringIO
。
所以,我这样编辑我的代码。
from django.db import models
from django.core.urlresolvers import reverse
from django.utils import timezone
from django.utils.text import slugify
from django.core.files.uploadedfile import InMemoryUploadedFile
from PIL import Image as Img
from io import StringIO, BytesIO
def upload_location(instance, file_name):
return "{}/{}/{}/{}".format(
"album",
instance.day,
instance.week,
file_name
)
class Album(models.Model):
DAYS = (
('Sun', '일요일'),
('Mon', '월요일'),
)
name = models.CharField(max_length=50)
description = models.CharField(max_length=100, blank=True)
image = models.ImageField(upload_to=upload_location)
day = models.CharField(max_length=3, choices=DAYS)
week = models.IntegerField()
slug = models.SlugField(unique=True, allow_unicode=True)
date = models.DateField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ['day', 'week']
def __str__(self):
return "{} - {}주차".format(self.get_day_display(), self.week)
def get_absolute_url(self):
return reverse(
"album:album_detail",
kwargs={
"slug": self.slug
}
)
def save(self, *args, **kwargs):
if not self.id:
self.slug = self.slug + "주차"
if self.image:
img = Img.open(BytesIO(self.image.read()))
if img.mode != 'RGB':
img = img.convert('RGB')
img.thumbnail((self.image.width/1.5,self.image.height/1.5), Img.ANTIALIAS)
output = BytesIO()
img.save(output, format='JPEG', quality=70)
output.seek(0)
self.image= InMemoryUploadedFile(
output,'ImageField',
"%s.jpg" %self.image.name.split('.')[0],
'image/jpeg',
output.len, None
)
super().save(*args, **kwargs)
但它发生错误:'_io.BytesIO' 对象没有属性 'len'
--> output.len
在我的代码中发生错误。
我开始怀疑使用 BytesIO
而不是 StringIO
是否正确。
还需要一些帮助来编辑我的代码。谢谢。
最佳答案
我修改了代码以使用 with
语句,因此无需自己关闭文件。
def save(self, *args, **kwargs):
if not self.id:
self.slug = self.slug + "주차"
if self.image:
with Img.open(BytesIO(self.image.read())) as img:
if img.mode != 'RGB':
img = img.convert('RGB')
img.thumbnail((self.image.width/1.5,self.image.height/1.5), Img.ANTIALIAS)
with BytesIO() as output:
img.save(output, format='JPEG', quality=70)
output.seek(0)
self.image = InMemoryUploadedFile(
output,'ImageField',
"%s.jpg" %self.image.name.split('.')[0],
'image/jpeg',
output.getbuffer().nbytes, None
)
super().save(*args, **kwargs)
关于python - 我必须使用哪一个来读取 Django 中的图像,StringIO 或 BytesIO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39198531/
我在 Python 中从 BytesIO 对象编写 .tar.gz 文件时遇到问题。只编写一个普通的 tarfile 效果很好,但是如果我将写入模式更改为 .tar.gz(或 bz 或 xz),它不会
我使用PyPDF4来合并pdf文件,然后使用合并后的pdf作为HttpResponse。我使用 BytesIO 来获取 PdfFileMerger 的结果。 我使用这段代码让它工作 def merge
当我尝试使用 python "c:\Django\blongo\blongo\blog\manage.py" runserver 我得到: File "C:\Python27\lib\site-pac
我无法理解这两个 BytesIO 对象的区别。如果我这样做: f = open('decoder/logs/testfile.txt', 'rb') file = io.BytesIO(f.read(
我正在尝试在我的程序中使用 Pillow 将相机中的字节串保存到文件中。这是一个示例,其中包含来 self 的相机的一个小原始字节字符串,它应该表示分辨率为 10x5 像素的灰度图像,使用 LSB 和
我有以下代码: 这部分在内存中生成 CSV: def to_csv(events: list) -> io.BytesIO(): if not events: return N
IOBase.truncate 的文档方法说: truncate(size=None) Resize the stream to the given size in bytes (or the cur
尝试在 python3.0 中对字符串进行标记化时,为什么在标记开始之前会出现前导 'utf-8'? 来自python3 docs , tokenize 现在应该按如下方式使用: g = tokeni
我正在开发 Scrapy Spider,尝试使用 slate 从目录中的多个 PDF 文件中提取文本。我对将实际的 PDF 保存到磁盘没有兴趣,因此建议我查看 io.bytesIO 子类 https:
在 OSX 上的 Python 3.5.1 上运行: import io b = io.BytesIO() b.write(b'222') print(b.getvalue()) b.truncate
我想试试 python BytesIO 类。 作为一个实验,我尝试写入内存中的 zip 文件,然后从该 zip 文件中读取字节。因此,我没有将文件对象传递给 gzip,而是传递了一个 BytesIO
我有一个包含 excel 文档数据的 BytesIO 对象。我要使用的库不支持 BytesIO 并且需要一个 File 对象。如何获取我的 BytesIO 对象并将其转换为 File 对象? 最佳答案
我目前正在尝试创建一个用于深度学习的大型数据集,其中包含大量存储在一起的压缩 mp3 文件,因此我没有 10 万个文件必须单独加载。 x = b'' with open("file1.mp3", "r
我想使用 io 中的 BytesIO 类来创建数据流,但是如果我通过它传输大量数据,它会占用大量内存,所以我问是否可以释放“旧”使用的内存“我已经阅读过的数据。 如果 io 模块无法做到这一点,我愿意
查看底部的更新 - 问题略有变化 我正在尝试使用 boto3 的 .download_fileobj 方法将文件从 s3 下载到类似文件的对象,但是当我尝试检查下载的字节流时,它是空的。但是我不确定我
我正在尝试使用 discord.py 发送一个文本文件,但是当我发送该文件时,它似乎是空的。 一个示例片段: bytes = BytesIO() test = b'sadfasdfsa' bytes.
我正在用 python 2.7 制作一个项目,但由于文档是用 python 3.5 编写的,所以它开始在最后部分给我带来一些错误。所以我将所有内容更改为 python 3.5,但由于 bytesIO,
我想直接在模型保存中上传生成的图像,而不必先将其保存到文件中。 型号: avatar = models.ImageField(upload_to="img/", null=True, blank=Tr
有一段不错的、经过测试的 python PyPDF2 代码,一个 .py 设计用于在“真实”操作系统文件上运行。调试完所有内容后,我现在正尝试将其合并到 plPython 函数中,用 io.Bytes
我想将 BytesIO 对象用作连续缓冲区(常见用例)。但是,是否可以从头部删除不再需要的字节? 看起来不像,因为只有一个 truncate() 方法。 ['__class__', '__delatt
我是一名优秀的程序员,十分优秀!