`
abruzzi
  • 浏览: 452460 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Python图形图像处理(使用PIL)

阅读更多

Python是一个神奇的语言,上手极快,而且可以找到很多写的非常优秀的模块。这几天在给单位做CSS Sprites时,需要将一些图片先进行缩略,然后拼成一张大图,这样虽然数据量的传输没有降低,但是可以减少链接请求数,从而提高WEB服务的速度。

一时没有找到顺手的图形处理工具,(photoshop, GIMP太专业,而且体积太大,如果为了处理几百张图片就要装,未免浪费)于是自己用python写了一个,其实我学习python一共花的时间不过5小时,关于pil中的使用方法大部分来自pil的handbook,不过很快就完成了任务,顺便记录一下。

 

思路很简单:

遍历一个文件夹中的所有指定格式的图片,并将其resize,最后将这些resize过的图片对象粘贴到一个大的image上,并保存。

新生成的大图有两种形式,一种是竖直排列,一种是水平排列。这两种我都做了一下。下面是代码:

import Image
import glob
import os

# vertical iconify the given image
def viconify(path=".\\", ext="jpg", size=(16, 16)):
    src = path + "*." + ext
    mode = "RGBA"
    width = size[0]
    height = len(glob.glob(src))*size[1]

    target = Image.new(mode, (width, height))

    currentHeight = 0
    step = size[1]

    for infile in glob.glob(src):
        img = Image.open(infile)
        img = img.resize(size)

        if img.mode != mode:
            img = img.convert(mode)
        target.paste(img, (0, currentHeight))
        currentHeight += step
    targetFile = "targetVer" + str(width) + "_" + str(height) + "." + ext
    print "target name = ", targetFile
    target.save(targetFile);


# horizontal iconify the given image
def hiconify(path=".\\", ext="jpg", size=(16,16)):
    f = path+"*."+ext 

    mode = "RGBA"
    width = len(glob.glob(f))*size[0]
    height = size[1]

    target = Image.new(mode, (width, height))
    
    currentLeft = 0
    step = size[0]

    for infile in glob.glob(f):
        img = Image.open(infile)
        img = img.resize(size)

        if img.mode != mode:
            img = img.convert(mode)

        target.paste(img, (currentLeft,0))
        currentLeft += step

    targetFile = "targetHor" + str(width) + "_" + str(height) + "." + ext
    print "target name = ", targetFile
    target.save(targetFile);

# for test only
hiconify("picLib3\\", "png", (32,32))
viconify("picLib3\\", "png", (32,32))

 要注意的地方就是最后两行的测试函数,我用的都是png图片,Jpg也做了测试,可以正常运行。其他的格式没有测试,如果有问题,可以讨论。我用的是skype的自带的一些icon做的测试,如果有侵权嫌疑,请及时通知,呵呵。


python就是简单,但是借助一些外部的包,就可以快速的完成很多需求。通过一些简单的例子,大概可以归纳出python的一些特点,而这些特点都是我个人感兴趣的所在,现在大概列一下,大家可以参考

  • 弱类型,(列表,元组等)
  • 函数式变成(谁说函数式变成是学院派?)
  • 面向对象
  • 强大的模块化
  • 优秀的外部支持(和其他语言的接口)

我对javascript的函数式变成做了一些研究,发现它跟python有很多相似之处,同时js要简单一些。有机会把我学习javascript的函数式编程的一些体会也贴出来,今天就先睡觉了。

  • 大小: 95.3 KB
分享到:
评论
7 楼 abruzzi 2009-04-23  
zjgzpc 写道

enhancer.enhance(1.5)

这一句会返回一个Image对象的引用(类似于句柄的一个东西),在返回的引用上做save操作即可
比如:
tempImg = enhancer.enhance(1.5)
tempImg.save('temp.jpg')

就是说,你已经用加强器处理过一次了,不过你又把中间结果丢弃了。
6 楼 zjgzpc 2009-04-22  
谢谢楼主的解答,问题已经解决了!
不过,这次又得请教您新问题了,关于ImageEnhance模块的问题,现在我需要调用此模块下的2个类,进行先后的处理,问题是,第一段代码的效果没有处理。代码如下,请朋友指证,谢谢。
import Image,ImageEnhance

im = Image.open("image.jpg")

im.thumbnail((190,160),Image.ANTIALIAS)

enhancer = ImageEnhance.Color(im)

enhancer.enhance(1.5)

enhancer2 = ImageEnhance.Sharpness(im)

enhancer2.enhance(1.0).save("new.jpg")
5 楼 abruzzi 2009-04-20  
zjgzpc 写道
楼主,您好,我是一名python新手。
我想请教个问题,如何在一段程序里,同时使用两个模块
并且第一个类处理图片后,第二个类接着处理,才进行保存?
一下是我测试的代码,请赐教下,感激不尽!

import Image,ImageEnhance
jay = Image.open("test.jpg")
jay.thumbnail((800,600),Image.ANTIALIAS)
enhancer = ImageEnhance.Color(jay)
enhancer.enhance(1.5).save("new1.jpg")

这段代码总是报错


1.代码我测了下,没有问题,可能出错的地方是你的图片本身有就没有800*600这么大。
2.在一段程序中使用两个模块,并且……,举个例子来说吧:

设有方法一(或者叫函数一)名叫A
输入为一个Image对象,输出为处理过的Image对象
方法二叫B
输入为一个Image对象,输出为处理过的Image对象

则可以这样使用:
A(B(image)).save(filename);
其中,image是一个Image对象的引用,filename是一个新的文件名的字符串。
4 楼 zjgzpc 2009-04-20  
楼主,您好,我是一名python新手。
我想请教个问题,如何在一段程序里,同时使用两个模块
并且第一个类处理图片后,第二个类接着处理,才进行保存?
一下是我测试的代码,请赐教下,感激不尽!

import Image,ImageEnhance

jay = Image.open("test.jpg")

jay.thumbnail((800,600),Image.ANTIALIAS)

enhancer = ImageEnhance.Color(jay)

enhancer.enhance(1.5).save("new1.jpg")

这段代码总是报错
3 楼 范三山 2009-01-08  
用python真的很爽,学起来也非常快
2 楼 abruzzi 2009-01-08  
blustc 写道
楼主的快速学习能力和运用能力另人钦佩

呵呵,其实不是我学得快,主要原因是python设计的太好,上手极快(如果对javascript之类的弱类型语言有些接触),而且有很多牛人和组织写的模块,函数库等。很适合做一些繁琐,没有顺手工具的工作。
1 楼 blustc 2009-01-08  
楼主的快速学习能力和运用能力另人钦佩

相关推荐

    Python图像处理.pdf

    Python 图像处理 Python 图像处理是使用 Python 语言进行图像处理的技术。...Python 图像处理技术使用 Python 语言和 PIL 软件包提供了一个强大且灵活的图像处理平台,可以满足各种图像处理需求。

    用Python进行图像处理

    Python在图像处理方面的应用主要依赖于其强大的第三方库支持,如PIL(Python Imaging Library)等。 #### 二、Python与图像处理 尽管MATLAB以其内置的图像处理工具箱而闻名,并且在复杂图像处理任务中表现卓越,但...

    总结python做图像处理毕业设计 (2).pdf

    Python在图像处理领域的应用广泛,尤其...总之,Python在图形图像处理领域的强大功能和易用性使其成为理想的学习和实践工具。通过实际的毕业设计,学生能够将理论知识转化为实践技能,同时提升编程能力和软件工程素养。

    Python图像处理库指南Python Imaging Library(PIL) Guide

    ### Python 图像处理库指南:Python Imaging Library (PIL) #### 一、引言 Python Imaging Library(简称PIL)是Python编程语言中一个强大的图像处理库,它为用户提供了一系列的功能来创建、修改以及转换各种格式...

    Python+pyqt5+PIL+批量图像处理.rar

    在本项目中,我们主要探讨的是如何利用Python的PyQt5库构建图形用户界面(GUI),结合PIL(Python Imaging Library)库实现批量图像处理,包括重命名和添加水印的功能。这是一份非常适合初学者的实践教程,因为它...

    总结python做图像处理毕业设计.docx

    在Python中进行图像处理是一项广泛应用于许多领域的技术,包括但不限于科学研究、医学成像、艺术创作、数据可视化和安全监控。本课程设计旨在帮助学生通过实际项目深入理解和掌握计算机图形学和数字图像处理的基础...

    python PIL

    Python PIL,全称为Python Imaging Library,是Python编程语言中用于图像处理的核心库。它提供了丰富的图像处理功能,包括但不限于打开、操作和保存多种文件格式,以及进行色彩转换、图像裁剪、旋转、滤波等图像操作...

    图像处理_python图像处理_python_

    1. **PIL(Python Imaging Library)**:这是Python中最基础的图像处理库,提供了丰富的功能,如读取、写入、显示和操作各种图像格式。PIL库包括了图像的基本操作,如裁剪、旋转、调整大小、色彩转换等。 2. **...

    python使用PIL库读取图片的像素值

    PIL 库(Python Imaging Library)是一个功能强大的图像处理库,可以用来读取、处理和保存图像。通过使用 PIL 库,我们可以读取图片的像素值并对其进行处理。 读取图片的像素值 使用 PIL 库读取图片的像素值可以...

    python图形处理11

    总之,"python图形处理11"涵盖了Python图像处理的多个方面,从基本的图像操作到复杂的计算机视觉任务,结合实例和库的使用,可以帮助开发者提升在图形处理领域的技能。通过学习这些内容,你可以掌握创建、分析和修改...

    OpenCV-Python图形图像处理:利用黑帽去除图像浅色水印.rar

    在图像处理领域,OpenCV(开源计算机视觉库)是一个强大的工具,尤其在Python编程语言中,它提供了丰富的功能,使得图像分析和处理变得简单。本主题聚焦于如何使用OpenCV-Python来去除图像中的浅色水印。水印通常被...

    python3.4 64位的PIL

    Python3.4 64位的PIL,全称为Python Imaging Library,是Python编程语言中的一个图像处理库。它提供了大量的图像处理功能,包括打开、修改和保存多种图像文件格式,以及进行基本的颜色操作、图像滤波、几何变换等。...

    图形图像处理.zip

    在IT领域,图形图像处理是一项基础且至关重要的技术,它涉及到计算机如何理解、操作和展示图像数据。在“图形图像处理.zip”这个压缩包中,很显然,它包含了一些关于图像处理的代码或工具,可能允许用户进行图像大小...

    使用 Python 进行图像处理(土耳其语).pdf

    在这个主题中,我们将深入探讨如何使用Python进行图像处理,以及它在人工智能(AI)和后端开发中的应用。 首先,让我们了解几个关键术语。机器学习是计算机科学的一个分支,它涉及到通过数学和统计方法从现有数据中...

    Python在数字图像处理课程教学中的应用.pdf

    数字图像处理课程是综合多领域交叉的学科,其在机器视觉、自动控制、虚拟现实等领域中已...通过使用Python和其丰富的扩展库,如OpenCV和NumPy,学生能够更加高效地实现图像处理算法,并加深对数字图像处理原理的理解。

    总结python做图像处理毕业设计 (2).docx

    通过Python进行图像处理,学生可以深入理解计算机图形学和数字图像处理的基本原理,掌握关键算法,并提升编程能力。以下是一些关于Python图像处理的知识点: 1. **基本概念**: - 计算机图形学:涉及创建、修改、...

    基于Python的图像处理系统(源码+exe可执行程序).rar

    总之,这个基于Python的图像处理系统涵盖了Python图像处理的核心技术,包括基础库的使用、高级图像处理算法的实现、GUI编程以及程序打包。无论是学习还是实际应用,都能为用户带来宝贵的实践经验。

    Mac python PIL

    PIL库可以与其他Python库(如NumPy、OpenCV)结合使用,进行更复杂的图像处理任务。例如,NumPy数组可以直接转换为PIL图像对象,方便进行科学计算和分析。 7. **错误处理和版本兼容性** 在Mac上使用PIL时,需要...

    PythonImagingLibrary中文手册、PIL中文手册、python图像处理.pdf

    1. **概览**:这部分介绍了PIL的基本概念,包括支持的图像格式、图像处理功能以及如何在Python环境中使用PIL。 2. **图像归档处理**:涵盖如何打开、保存和读取不同格式的图像文件。 3. **图像显示**:讲解如何在...

    python-》pil selenium hook

    这些是"python-》pil selenium hook"主题中的关键知识点,它们涉及到Python 2.7的使用、图像处理、Web自动化测试以及在两者之间建立交互的方式。理解并熟练掌握这些概念,将有助于你构建更复杂的自动化解决方案。

Global site tag (gtag.js) - Google Analytics