gpt4 book ai didi

python - 将图像上传到 s3 后,上传随附的缩略图

转载 作者:行者123 更新时间:2023-12-01 09:21:11 25 4
gpt4 key购买 nike

我可以通过 AJAX 成功将图像上传到 s3。不过,我的 s3 存储桶中还需要有一个随附的缩略图。

这是我的 s3 上传 ajax View :

...
session = boto3.Session(
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
)
s3 = session.resource('s3')

s3.Bucket('****-bucket').put_object(Key='media/%s' % random_filename, Body=img, ContentType='image/png')
return HttpResponse()

从我的代码创建和上传缩略图的最佳方法是什么?我是否需要在当前的 put_object 下添加另一个 put_object?如果是这样,我如何实现像 PIL 这样的缩略图生成器?我尝试复制this answer但是设置与我的完全不同。

或者使用 AWS lambda 函数是否可行?

任何建议表示赞赏。

编辑:

文件上传有两种方式:磁盘图片和URL图片。文件名取 self 前端生成的随机字符串。

def upload_image(request):
random_filename = request.POST.get('random_filename')
if request.is_ajax():
if request.FILES:
for file in request.FILES:
if file == "image":
img = request.FILES.get('image')

else:
img = request.POST.get('imageURL')
img = img_from_url(img)


session = boto3.Session(
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
)
s3 = session.resource('s3')

s3.Bucket('****-bucket').put_object(Key='media/%s' % random_filename, Body=img, ContentType='image/png')
<小时/>
def img_from_url(file):
image_data = requests.get(file).content
return ContentFile(image_data)

最佳答案

使用 OpenCV 调整图像大小并将其编码为字节,并让 Boto3 使用缩略图的新 key 名称将这些字节上传到 S3:

import boto3
import cv2

BUCKET_NAME = "MY_BUCKET_NAME"

# Load original image from disk
original_image_filename = "original_image.png"
original_image = cv2.imread(original_image_filename)

# Resize the original image to obtain a thumbnail image,
# and encode this thumbnail to bytes in the PNG format
thumbnail_image = cv2.resize(original_image, (100, 100))
thumbnail_image_png = cv2.imencode(".png", thumbnail_image)[1].tostring()

# Upload the PNG bytes of the thumbnail to S3
s3 = boto3.resource("s3")
thumbnail_image_filename = "thumbnail.png"
object = s3.Object(BUCKET_NAME, thumbnail_image_filename)
object.put(Body=thumbnail_image_png, ContentType="image/png")

关于python - 将图像上传到 s3 后,上传随附的缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50778924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com