枕头调整像素图像大小 - Django/Pillow

2024-02-04

我正在 Django 中开发一个图像上传器。图像上传并保存到磁盘后, 我正在尝试调整保存的图像的大小,同时保持其纵横比。我正在使用 Pillow 进行图像处理/调整大小。当我尝试调整图像大小时出现问题,即使调整大小的图像的长宽比与原始图像的长宽比相同,它也会像素化。

原始保存图像:https://www.dropbox.com/s/80yk6tnwt3xnoun/babu_980604.jpeg https://www.dropbox.com/s/80yk6tnwt3xnoun/babu_980604.jpeg

调整大小的像素图像:https://www.dropbox.com/s/bznodpk4t4xlyqp/babu_736302.large.jpeg https://www.dropbox.com/s/bznodpk4t4xlyqp/babu_736302.large.jpeg

我尝试过谷歌搜索这个问题,并检查了 stackoverflow 上的其他相关链接,

like

如何使用 PIL 调整图像大小并保持其纵横比? https://stackoverflow.com/questions/273946/how-do-i-resize-an-image-using-pil-and-maintain-its-aspect-ratio

调整图像大小并保持纵横比并使纵向和横向图像的尺寸完全相同? https://stackoverflow.com/questions/9103257/resize-image-maintaining-aspect-ratio-and-making-portrait-and-landscape-images-e

但问题仍然存在。

版本:

姜戈=1.6.4

枕头=2.4.0

一切都已在 virtualenv 内设置。请帮忙!

PS:我是 Python/Django 世界的新手

这是我的代码片段:

import json
import os
import hashlib
from datetime import datetime
from operator import itemgetter
import random
from random import randint
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.http import (HttpResponse, HttpResponseRedirect)
from django.core.context_processors import csrf
from django.core.files.images import get_image_dimensions
from django.shortcuts import render, redirect
from django.forms.models import model_to_dict
from django.views.decorators.csrf import csrf_exempt
from PIL import Image, ImageOps
from django.views.decorators.csrf import csrf_exempt, csrf_protect
import settings

from hashlib import md5
from django import forms

from beardedavenger.models import *

from django.views.decorators.http import require_POST

import pdb
import requests

def imagehandler(requests):
if requests.method == 'POST':
    filename = requests.FILES['file'].name
    file_extension = filename.split('.')[len(filename.split('.')) - 1].lower()
    errors = []

    username = 'nit'

    global random

    #allowed image types are png, jpg, jpeg, gif
    if file_extension not in settings.IMAGE_FILE_TYPES:
        errors.append('The image file you provided is not valid. Only the following extensions are allowed: %s' % ', '.join(settings.IMAGE_FILE_TYPES))
    else:
        image = requests.FILES['file']
        image_w, image_h = get_image_dimensions(image)
        rand = str(random.randint(100000,999999))
        with open(settings.MEDIA_ROOT + username + '_' + rand + '.jpeg', 'wb+') as destination:
            for chunk in requests.FILES['file'].chunks():
                destination.write(chunk)

        large_size = (1920, 1200)

        infile = settings.MEDIA_ROOT + username + '_' + rand + ".jpeg"

        large_file = settings.MEDIA_ROOT + username + '_' + rand +".large"

        try:
            im = Image.open(infile)

            base_width = large_size[0]

            aspect_ratio = float(image_w / float(image_h))
            new_height = int(base_width / aspect_ratio)

            if new_height < 1200:
                final_width = base_width
                final_height = new_height
            else:
                final_width = int(aspect_ratio * large_size[1])
                final_height = large_size[1]

            final_size = (final_width, final_height)

            imaged = im.resize((final_width, final_height), Image.ANTIALIAS)
            # imaged = ImageOps.fit(im, final_size, Image.ANTIALIAS, centering = (0.5,0.5))
            imaged.save(large_file, "JPEG", quality=90)

        except IOError:
            errors.append('error while resizing image')

    if not errors:
        response = HttpResponse(json.dumps({'status': 'success','filename': filename }),
        mimetype="application/json")
    else:
        response = HttpResponse(json.dumps({'status': 'failure','errors': errors,'message': 'Error uploading Picture. '}),
        mimetype="application/json")
    return response
else:
    return render(requests, 'upload.html')

更新 :

我正在使用 Pillow 来调整图像大小和压缩图像。即使保持纵横比,调整大小时图像中也会出现一定程度的暗淡[与原始图像相比,抗锯齿效果比所需的要多]。我将处理库切换到 ImageMagick(针对许多建议不要这样做的帖子!)以及 Wand API (docs.wand-py.org/en/0.3.7/index.html) 来处理我的图像。这个改变就像一个魅力!


通过这段代码,我得到了没有像素化的图像(Python 2.7,Pillow 2.4.0)。

from PIL import Image

large_size = (1920, 1200)

im = Image.open("babu_980604.jpeg")

image_w, image_h = im.size
aspect_ratio = image_w / float(image_h)
new_height = int(large_size[0] / aspect_ratio)

if new_height < 1200:
    final_width = large_size[0]
    final_height = new_height
else:
    final_width = int(aspect_ratio * large_size[1])
    final_height = large_size[1]

imaged = im.resize((final_width, final_height), Image.ANTIALIAS)

imaged.show()
imaged.save("out.jpg", quality=90)

这和你的代码之间的主要区别是它得到image_w and image_h直接从打开的图像而不是get_image_dimensions(image),其实现未显示。

代码中的一些小事情:

  • 你可以设置infile之前with open(...)并在那里使用它。

  • final_size未使用且可以删除,或以其他方式使用它im.resize().

  • base_width可以替换为large_size[0],因为你也使用large_size[1]别处。

  • image被设定为requests.FILES['file']但你也使用requests.FILES['file']直接地。你可以重复使用image.

  • global random可能不需要。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

枕头调整像素图像大小 - Django/Pillow 的相关文章

随机推荐

  • 同时读取子进程的 stdout 和 stderr

    我正在尝试在 Python 中运行一个冗长的命令 输出到 stdout 和 stderr 我想轮询子进程并将输出写入单独的文件 根据这个答案 我尝试了以下操作python 中 subprocess PIPE 的非阻塞读取 https sta
  • 来自命令行的 R 脚本

    我想运行这个示例脚本 http mazamascience com WorkingWithData p 912 http mazamascience com WorkingWithData p 912从 Windows 命令行 所以我打开命
  • 以编程方式启用/禁用实体代理

    我在新项目中使用 Entity Framework 4 1 和 POCO 实体 一切都工作正常 直到我开始使用 AppFabric 缓存来缓存实体 我开始从与反序列化代理对象相关的缓存中检索实体时出现错误 我通过设置 ContextOpti
  • 无法消除绘图的一像素宽的白色边距(底部和右侧)

    我正在尝试使用绘制并保存我的矩阵image 没有轴 标签 边距等 我需要的只是纯彩色图像 其中单元格数量将对应于保存的绘图上的像素数量 在 R 图形设备上 它看起来不错 但如果我将绘图保存到文件中 则图像的底部和右侧始终会保留一像素宽的白色
  • Bamboo + sonar.dynamicAnalysis=reuseReports = 0% 规则合规性

    Bamboo 可以进行连续构建 但希望使用 Sonar 进行质量指标跟踪 单元测试通过 失败和 Clover 代码覆盖率指标必须在 Bamboo 中捕获 但是 这些相同的值也应该发送到 Sonar 以免通过运行单元测试和 Clover 两次
  • iOS 推送通知 SSL 证书

    生成的证书是否用于发送特定于服务器的推送通知 或者如果我更改服务器 我可以在任何其他服务器上使用它吗 谢谢 您可以在任何服务器中使用它 Apple 推送通知 SSL 证书不特定于任何服务器 示例 parse com xtify com 等
  • fcgio.cpp:50: 错误: 'EOF' 未在此范围内声明

    我正在尝试在 Linux Ubuntu 10 x 机器上构建 fastcgi 我运行以下命令 配置 制作 我收到以下错误 fcgio cpp In destructor virtual fcgi streambuf fcgi streamb
  • 为什么 NoClassDefFoundError 的名称错误

    我创建了一个List java文件夹中的文件UtilityPack其中包含此代码 package Utilities public class List private class node public void insert int d
  • UWP 在打开时更改 ComboBox 位置

    我有一个ComboBox在 c XAML 中 当没有选择任何内容时PlaceHolderText显示并单击它打开它 正常行为是在中间打开它 我希望下拉菜单在顶部打开 假设我有一个ComboBox并填写数字1 100 然后我希望它显示从1 如
  • Flutter BottomNavigationBar 不适用于三个以上的项目

    我有一个问题底部导航栏在颤振中 0 6 一旦我添加超过三个 BottomNavigationBarItem小时候 栏中的按钮有白色图标 而且它们很乱 当我只使用三个或更少的物品时 一切都很好 这是我使用的小部件代码 它打破了标准 botto
  • iOS 转换十六进制值

    如何将十六进制值转换为表情符号图标 我有一个如下所示的字符串 NSString myVal 1F61E 我如何转换此文本以将其显示为表情符号字符 我发现了这个价值从这个链接 http www alanwood net unicode emo
  • 为什么 Snowsql 不打开外部浏览器?

    我想得到snowsql在我的计算机上本地工作 但我无法登录我的数据库 因为它要求我使用我的 google 帐户进行 SSO 身份验证 文档说使用 authenticator externalbrowser选项哪个should打开本地浏览器并
  • 服务器上的AJAX成功功能

    这适用于我的开发机器 但不适用于生产服务器 我正在尝试使用 ajax 更新一些 div 但它们没有更新 尽管其他部分工作正常 我在服务器上使用 IIS 6 当我使用 firebug 在服务器端调试此代码时 它不会命中我添加到 success
  • R igraph,如何使用形状和光栅的混合来绘制顶点?

    我正在尝试使用 R 和 igraph 绘制图形 混合使用形状和光栅图像作为顶点 我修改了下面的 igraph 示例来重现我的问题 有人能看出出了什么问题吗 您需要一个 png 文件来测试脚本 library png library igra
  • 修改跳过空列表并继续执行功能

    背景 以下代码稍作修改跳过空列表并继续执行函数 https stackoverflow com questions 57236878 skipping empty list and continuing with function impo
  • 如何使用 ASP.NET Core v2 在 Visual Studio 2017 中安装 font-awesome

    我正在使用 ASP NET Core v2 构建一个网页 并且想使用 font awesome 首先我要说的是我已经尝试了几件事 比如从 NPM 安装 Bower 从 NPM 安装 font awesome 从 VS 中的 Bower 包安
  • 如何将数据集写入Kafka主题?

    我正在使用 Spark 2 1 0 和 Kafka 0 9 0 我正在尝试将批处理 Spark 作业的输出推送到 kafka 该作业应该每小时运行一次 但不是流式运行 在网上寻找答案时 我只能找到 kafka 与 Spark 流的集成 而没
  • 如何抑制“SpriteKit 纹理图集生成器警告”?

    Xcode 报告以下警告 SpriteKit 纹理图集生成器警告由于输入纹理尺寸而将 images atlas 拆分为 2 个纹理图集 虽然我将来会修改我的图像以避免 SpriteKit 生成此警告 但我想使用一些 pragma 指令暂时抑
  • 点击事件中的全日历错误时间

    我正在使用角度和全日历 我有 令人惊讶的 时区问题 而且我似乎无法解决问题 如果在周视图中我点击 08 00 我打开一个模式并显示时间 我会看到 09 00 timezone Europe Brussels ignoreTimezone f
  • 枕头调整像素图像大小 - Django/Pillow

    我正在 Django 中开发一个图像上传器 图像上传并保存到磁盘后 我正在尝试调整保存的图像的大小 同时保持其纵横比 我正在使用 Pillow 进行图像处理 调整大小 当我尝试调整图像大小时出现问题 即使调整大小的图像的长宽比与原始图像的长