此应用程序允许上载和裁剪图像

django-image-cropper的Python项目详细描述


此应用程序用于图像裁剪。用户可以上传一些图片或照片, 选择希望的区域并保存图像。

执照是麻省理工学院的。

要求

从0.2版开始,需要1.3+版的django。如果你是 请使用较旧的django版本

你还需要安装PIL或枕头图形库。菌毛 将与Django图像裁剪器一起安装

安装

首先,请安装django映像裁剪器:

pip install django-image-cropper

然后您必须编辑设置模块:将项目“裁剪器”添加到 您已安装的应用程序:

INSTALLED_APPS += (
    'cropper',
)

下一步将django图像裁剪器url配置添加到url模块:

urlpatterns = patterns('',
    ....
    url('^cropper/', include('cropper.urls')),
    ...
)

最后一次调用项目中的syncdb management命令:

./manage.py syncdb

如果您使用的是django.contrib.staticfiles应用程序,那么 需要收集静态文件:

./manage.py collecstatic

否则,您需要将django图像裁剪器/裁剪器/静态文件复制到 手动创建静态根目录或创建符号链接。

用法

在浏览器中打开/croper/url。在这里您可以通过文件输入选择图像 然后上传。在下一个屏幕上,如果启用了javascript并且静态服务 很好,您将看到jquery的jcrop插件工作区。挑一块地方推 “裁剪”按钮可裁剪图像

裁剪后的图像副本保存在服务器上

自定义裁剪逻辑

当然,默认逻辑很差,无法使用。但你很容易改变 应用程序行为。

你可以为图像上传和图像裁剪编写自己的成功处理程序 Django使用它。

要在默认设置中使用自己的hanlders,只需使用自己的urlconfs。你必须使用 拥有关键字args中的“success”键。此值必须是python可调用类型

from cropper.forms import CroppedForm, UploadForm
from my_project.utils import my_upload_handler, my_crop_handler

urlpatterns = patterns('cropper.views',
    url('^$', view='upload', name='cropper_upload', kwargs={'form_class': UploadForm, 'success':  my_upload_handler}),
    url('^(?P<original_id>\d+)/$', view='crop', name='cropper_crop', kwargs={'form_class': CropForm, 'success':  my_crop_handler}),
)

如您所见,您还可以使用另一个表单类,而不是standart 指定“form_class”键,但可能不需要。

它是什么处理程序?

每个处理程序都是python函数,它有一些输入参数并返回 像每个视图函数一样,httpresponse对象。

让我们看看如何上传处理程序原型:

def my_upload_success_handler(request, form, original):
    """
    Success upload handler
    """
    print "Uploda form data", form.cleaned_data
    print "File uploaded to " % original.image.path

    # This handler do nothing, but print parameters

    from django.shortcuts import redirect
    return redirect(original)
  • request是wsgirequest对象(与view相同)
  • form是上载表单实例。此表单实例仍然有效。
  • original是原始模型实例。图像字段调用image

裁剪处理程序原型:

def my_crop_success_handler(request, form, original, cropped):
    """
    Custom crop handler
    """
    print "Crop form data", form.cleaned_data
    print "Original object: %s" % original
    print "Original in cropped model (the same in previous line): %s" % cropped.original
    print "Cropped image: %s" % cropped.image

    # For example, we can use cropped image as user profile avatar
    # Perhaps user is authenticated and skip checks ;)

    from django.core.files.base import ContentFile
    from django.contrib import messages
    from django.shortcuts import redirect
    import os

    profile = request.user.get_profile()
    profile.avatar.save(
        os.path.basename(cropped.image.path),
        ContentFile(cropped.image.path)
    )

    messages.success(request, 'Avatar uploaded and cropped')
    return redirect(request.user)

前三个参数与上载处理程序输入参数相同。第四是 cripped模型实例。它有image字段包含裁剪的图像和 相关原始照片的外键。

贡献

如果你发现了一个bug,实现了一个特性并且认为它是有用的,那么请 考虑贡献。欢迎提供修补程序、拉取请求或只是建议!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在Eclipse中设置Java路径,以便在外部驱动器上运行它?   在windows上使用Java服务包装器GUI与桌面交互   java是与此字符序列不匹配的正则表达式   java无法使用kafka管理客户端API创建具有所需分区的kafka主题   java基于单个单元格值获取整个excel行   当使用Spring的构造函数注入时,java bean是否在构造函数中完全初始化?   java重置LineNumberReader的计数器   将字符串从Java文件传递到jQuery   安卓在来自不同Java类文件的活动中祝酒   java在使用mvvm时如何在zk中更新progressmeter   使用regex获取由“”Java包围的值   使用tester类的java猜谜游戏   api响应的java POJO,其密钥为“”   java正则表达式,用于匹配长度大于n的字母和数字字符串?   java如何使用Json保存和恢复RecyclerView项的位置   在Java中用字符代码替换字符串   Jenkins中的java PermGen错误   java swing panel问题   boolean在Java中,false如何可能等于true   java如何使用Servlet从HTML表单中检索“分组”项?