Image 模块提供了一个同名类(Image),也提供了一些工厂函数,包括从文件中载入图片和创建新图片。例如,以下的脚本先载入一幅图片,将它旋转 45 度角,并显示出来:

1 >>>from PIL import Image
2  >>>im = Image.open("j.jpg")
3  >>>im.rotate(45).show()

下面这个脚本则创建了当前目录下所有以 .jpg 结尾的图片的缩略图。

Create thumbnail

Image 类中的函数

0.    new : 这个函数创建一幅给定模式(mode)和尺寸(size)的图片。如果省略 color 参数,则创建的图片被黑色填充满,如果 color 参数是 None 值,则图片还没初始化。

new

1.    open : 打开并识别所提供的图像文件。不过,使用这函数的时候,真正的图像数据在你进行数据处理之前并没有被读取出来。可使用 load 函数进行强制加载。 mode 参数可以省略,但它只能是 "r" 值。

open

2.    blend : 使用两幅给出的图片和一个常量 alpha 创建新的图片。两幅图片必须是同样的 size 和 mode 。

blend

3.    composite : 使用两幅给出的图片和一个与 alpha 参数相似用法的 mask 参数,其值可为:"1", "L", "RGBA" 。两幅图片的 size 必须相同。

composite

4.    eval : 使用带一个参数的函数作用于给定图片的每一个像素。如果给定的图片有超过一个的 频段(band),则该函数也会作用于每一个频段。注意,该函数是每一个像素计算一次,所以不能使用一些随机组件或其他的生成器。

eval

5.    frombuffer : (PIL 1.1.4 中新添加的)使用标准 "raw" 解码器在像素数据或是对象缓存中创建一个图像副本。不是所有的模式都支持这种用法。支持的 mode 有"L", "RGBX", "RGBA", "CMYK"。

frombuffer

6.    fromstring : 注意,这个函数只对像素数据进行解码,而不是一整张图片。如果你有一整张字符串格式的图片,使用 StringIO 对其进行包装并用 open 函数载入它。

fromstring

7.    merge : 使用一系列单一频段(band)的图像来创建新的一幅图像。频段是以一些图像组成的元组或列表,所有的 band 必须有相同大小的 size 。

merge

Image 类中的方法

0.    convert : 返回一个转换后的图像的副本。

convert

下面是一个例子:转换 RGB 为 XYZ 。

RGB2XYZ

1.    copy : 复制图像。如果你希望粘贴一些东西进图像里面的话可以使用这个方法,但仍然会保留原图像。

copy

2.    crop : 返回图像某个给定区域。box 是一个 4 元素元组,定义了 left, upper, right, lower 像素坐标。使用这个方法的时候,如果改变原始图像,可能会,也可能不会改变裁剪生成的图像。创建一个完全的复制,裁剪复制的时候使用 load 方法。

crop

3.    draft : 按给出的 mode 和 size 进行配置。可以使用这个方法将彩色JPEG图片转为灰度图。

draft

4.    filter : 返回图像使用滤波器后的副本。可以看 这里 获取更多有用的滤波器。

filter

5.    fromstring : 和前面的函数是一样的功能,不过这个方法是将数据载入到当前图像。

6.    getbands : 返回一个元组,包含每一个 band 的名字,比如,在一幅 RGB 格式的图像上使用 getbands 则返回("R", "G", "B")。

getbands

7.    getbbox : 计算图像边框值,返回一个 4-元组 ,值为(左,上,右,下)。

getbbox

8.    getcolors : 在 1.1.5 版本中新添加的。返回一个未排序列表,其元素是元组(count, color)。the count is the number of times the corresponding color occurs in the image 。If the maxcolors value is exceeded, the method stops counting and returns None。

getcolors

9.    getdata : 返回一个图像内容的像素值序列。不过,这个返回值是 PIL 内部的数据类型,只支持确切的序列操作符,包括迭代器和基本序列方法。我们可以通过 list(im.getdata())  为其生成普通的序列。

getdata

10.    getextrema : 返回一个 2-元组 ,值为图像的最小最大值。在当前PIL版本中,仅支持单一频段(single-band)的图像。

getextreme

11.    getpixel : 返回指定位置的像素,如果所打开的图像是多层次的图片,那这个方法就返回一个元组。

getpixel

12.    histogram : 返回图像直方图,值为像素计数组成的列表。如果有参数 mask ,则返回图像所有部分的直方图。

histogram

13.    load : 版本 1.1.6 新添加的。load 返回对象的像素值,可以用来修改像素值。

load

14.    paste : 1). 粘贴新图片至图片中,box 参数可以为 2-元组(upper, left)或是 4-元组(left, upper, right, lower),或者是 None(0, 0)。2). 功能同上。不过是将指定位置填充为某种颜色。

paste

15.    point :

point

------------

Python图像处理库PIL的基本概念

PIL中所涉及的基本概念有如下几个:通道(bands)、模式(mode)、尺寸(size)、坐标系统(coordinate system)、调色板(palette)、信息(info)和滤波器(filters)。

1、  通道

每张图片都是由一个或者多个数据通道构成。PIL允许在单张图片中合成相同维数和深度的多个通道。

以RGB图像为例,每张图片都是由三个数据通道构成,分别为R、G和B通道。而对于灰度图像,则只有一个通道。

对于一张图片的通道数量和名称,可以通过方法getbands()来获取。方法getbands()是Image模块的方法,它会返回一个字符串元组(tuple)。该元组将包括每一个通道的名称。

Python的元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号,元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

方法getbands()的使用如下:

>>>from PIL import Image

>>> im= Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.getbands()

('R', 'G', 'B')

>>>im_bands = im.getbands()

>>>len(im_bands)

3

>>>print im_bands[0]

R

>>>print im_bands[1]

G

>>>print im_bands[2]

B

2、  模式

图像的模式定义了图像的类型和像素的位宽。当前支持如下模式:

1:1位像素,表示黑和白,但是存储的时候每个像素存储为8bit。

L:8位像素,表示黑和白。

P:8位像素,使用调色板映射到其他模式。

RGB:3x8位像素,为真彩色。

RGBA:4x8位像素,有透明通道的真彩色。

CMYK:4x8位像素,颜色分离。

YCbCr:3x8位像素,彩色视频格式。

I:32位整型像素。

F:32位浮点型像素。

PIL也支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)。

可以通过mode属性读取图像的模式。其返回值是包括上述模式的字符串。

属性mode的使用如下:

>>> from PIL importImage

>>> im =Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>> im.mode

'RGB'

>>> md = im.mode

>>> print md

RGB

3、  尺寸

通过size属性可以获取图片的尺寸。这是一个二元组,包含水平和垂直方向上的像素数。

属性mode的使用如下:

>>> from PIL importImage

>>> im =Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.size

(800, 450)

>>>im_size = im.size

>>>print im_size[0]

800

>>>print im_size[1]

450

4、  坐标系统

PIL使用笛卡尔像素坐标系统,坐标(0,0)位于左上角。注意:坐标值表示像素的角;位于坐标(0,0)处的像素的中心实际上位于(0.5,0.5)。

坐标经常用于二元组(x,y)。长方形则表示为四元组,前面是左上角坐标。例如,一个覆盖800x600的像素图像的长方形表示为(0,0,800,600)。

5、  调色板

调色板模式 ("P")使用一个颜色调色板为每个像素定义具体的颜色值

6、  信息

使用info属性可以为一张图片添加一些辅助信息。这个是字典对象。加载和保存图像文件时,多少信息需要处理取决于文件格式。

属性info的使用如下:

>>>from PIL import Image

>>> im =Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.info

{'jfif_version':(1, 1), 'jfif': 257, 'jfif_unit': 1, 'jfif_density': (96, 96), 'dpi': (96, 96)}

>>>im_info = im.info

>>>im_info

{'jfif_version':(1, 1), 'jfif': 257, 'jfif_unit': 1, 'jfif_density': (96, 96), 'dpi': (96, 96)}

>>>print im_info['jfif_version']

(1, 1)

>>>print im_info['jfif']

257

7、  滤波器

对于将多个输入像素映射为一个输出像素的几何操作,PIL提供了4个不同的采样滤波器:

NEAREST:最近滤波。从输入图像中选取最近的像素作为输出像素。它忽略了所有其他的像素。

BILINEAR:双线性滤波。在输入图像的2x2矩阵上进行线性插值。注意:PIL的当前版本,做下采样时该滤波器使用了固定输入模板。

BICUBIC:双立方滤波。在输入图像的4x4矩阵上进行立方插值。注意:PIL的当前版本,做下采样时该滤波器使用了固定输入模板。

ANTIALIAS:平滑滤波。这是PIL 1.1.3版本中新的滤波器。对所有可以影响输出像素的输入像素进行高质量的重采样滤波,以计算输出像素值。在当前的PIL版本中,这个滤波器只用于改变尺寸和缩略图方法。

注意:在当前的PIL版本中,ANTIALIAS滤波器是下采样(例如,将一个大的图像转换为小图)时唯一正确的滤波器。BILIEAR和BICUBIC滤波器使用固定的输入模板,用于固定比例的几何变换和上采样是最好的。

Image模块中的方法resize()和thumbnail()用到了滤波器。

方法resize()的使用如下:

方法resize()的定义为:resize(size, filter=None)=> image

>>>from PIL import Image

>>> im= Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.size

(800, 450)

>>>im_resize = im.resize((256,256))

>>> im_resize.size

(256, 256)

对参数filter不赋值的话,方法resize()默认使用NEAREST滤波器。如果要使用其他滤波器可以通过下面的方法来实现:

>>>im_resize0 = im.resize((256,256), Image.BILINEAR)

>>>im_resize0.size

(256, 256)

>>>im_resize1 = im.resize((256,256), Image.BICUBIC)

>>>im_resize1.size

(256, 256)

>>>im_resize2 = im.resize((256,256), Image.ANTIALIAS)

>>>im_resize2.size

(256, 256)

方法thumbnail ()的使用如下:

方法thumbnail ()的定义为:im.thumbnail(size, filter=None)

>>>from PIL import Image

>>> im= Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.size

(800, 450)

>>>im.thumbnail((200,200))

>>>im.size

(200,112)

这里需要说明的是,方法thumbnail()需要保持宽高比,对于size=(200,200)的输入参数,其最终的缩略图尺寸为(200, 112)。

对参数filter不赋值的话,方法thumbnail()默认使用NEAREST滤波器。如果要使用其他滤波器可以通过下面的方法来实现:

>>> im= Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.size

(800, 450)

>>> im.thumbnail((200,200),Image.BILINEAR)

>>> im.size

(200, 112)

>>> im= Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.size

(800, 450)

>>> im.thumbnail((200,200), Image.BICUBIC)

>>> im.size

(200, 112)

>>> im= Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.size

(800, 450)

>>> im.thumbnail((200,200), Image.ANTIALIAS)

>>> im.size

(200, 112)

IMAGE模块0x1

Image模块是PIL中最重要的模块,它有一个类叫做image,与模块名称相同。Image类有很多函数、方法及属性,接下来将依次对image类的属性、函数和方法进行介绍。

一、Image类的属性

1、  Format

定义:im.format ⇒ string or None

含义:源文件的文件格式。如果是由PIL创建的图像,则其文件格式为None。

例子:

>>>from PIL import Image

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

>>>im.format

'JPEG'

注:test.jpg是JPEG图像,所以其文件格式为JPEG。

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.gif")

>>>im.format

'GIF'

注:test.gif为GIF文件,所以其文件格式为GIF。

2、  Mode

定义:im.mode ⇒ string

含义:图像的模式。这个字符串表明图像所使用像素格式。该属性典型的取值为“1”,“L”,“RGB”或“CMYK”。对于图像模式的介绍,可以参考我的blog“Python图像处理库PIL的基本概念介绍”。

例子:

>>>from PIL import Image

>>> im = Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

>>> im.mode

'RGB'

>>> im = Image.open("D:\\Code\\Python\\test\\img\\test.gif")

>>> im.mode

'P'

3、  Size

定义:im.size ⇒ (width, height)

含义:图像的尺寸,按照像素数计算。它的返回值为宽度和高度的二元组(width, height)。

例子:

>>>from PIL import Image

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

>>>im.size

(800, 450)

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.gif")

>>> im.size

(400, 220)

4、  Palette

定义:im.palette ⇒ palette or None

含义:颜色调色板表格。如果图像的模式是“P”,则返回ImagePalette类的实例;否则,将为None。

例子:

>>> from PIL import Image

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

>>> im.mode

'RGB'

>>>im.palette

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.gif")

>>> im.mode

'P'

>>>im.palette

<PIL.ImagePalette.ImagePaletteobject at 0x035E7AD0>

>>> pl= im.palette

Pl为ImagePalette类的实例。

5、  Info

定义:im.info ⇒ dictionary

含义:存储图像相关数据的字典。文件句柄使用该字典传递从文件中读取的各种非图像信息。大多数方法在返回新的图像时都会忽略这个字典;因为字典中的键并非标准化的,对于一个方法,它不能知道自己的操作如何影响这个字典。如果用户需要这些信息,需要在方法open()返回时保存这个字典。

例子:

>>>from PIL import Image

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

>>>im.info

{'jfif_version':(1, 1), 'jfif': 257, 'jfif_unit': 1, 'jfif_density': (96, 96), 'dpi': (96, 96)}

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.gif")

>>>im.info

{'duration':100, 'version': 'GIF89a', 'extension': ('NETSCAPE2.0', 795L), 'background': 0,'loop': 0}

IMAGE模块0x1

二、Image类的函数

1、  New

定义:Image.new(mode,size) ⇒ image

Image.new(mode, size, color) ⇒ image

含义:使用给定的变量mode和size生成新的图像。Size是给定的宽/高二元组,这是按照像素数来计算的。对于单通道图像,变量color只给定一个值;对于多通道图像,变量color给定一个元组(每个通道对应一个值)。在版本1.1.4及其之后,用户也可以用颜色的名称,比如给变量color赋值为“red”。如果没有对变量color赋值,图像内容将会被全部赋值为0(图像即为黑色)。如果变量color是空,图像将不会被初始化,即图像的内容全为0。这对向该图像复制或绘制某些内容是有用的。

例子:

>>>from PIL import Image

>>> im= Image.new("RGB", (128, 128), "#FF0000")

>>>im.show()

图像im为128x128大小的红色图像。

>>> im= Image.new("RGB", (128, 128))

>>>im.show()

图像im为128x128大小的黑色图像,因为变量color不赋值的话,图像内容被设置为0,即黑色。

>>> im= Image.new("RGB", (128, 128), "red")

>>>im.show

图像im为128x128大小的红色图像。

2、  Open

定义:Image.open(file) ⇒ image

Image.open(file, mode) ⇒ image

含义:打开并确认给定的图像文件。这个是一个懒操作;该函数只会读文件头,而真实的图像数据直到试图处理该数据才会从文件读取(调用load()方法将强行加载图像数据)。如果变量mode被设置,那必须是“r”。

用户可以使用一个字符串(表示文件名称的字符串)或者文件对象作为变量file的值。文件对象必须实现read(),seek()和tell()方法,并且以二进制模式打开。

例子:

>>> from PIL import Image

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

>>>im.show()

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg", "r")

>>>im.show()

3、  Blend

定义:Image.blend(image1,image2, alpha) ⇒ image

含义:使用给定的两张图像及透明度变量alpha,插值出一张新的图像。这两张图像必须有一样的尺寸和模式。

合成公式为:out = image1 *(1.0 - alpha) + image2 * alpha

如果变量alpha为0.0,将返回第一张图像的拷贝。如果变量alpha为1.0,将返回第二张图像的拷贝。对变量alpha的值没有限制。

例子:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")

>>> im =Image.blend(im01, im02, 0.3)

>>> im.show()

Test01.jpg和test02.jpg两张图像size都为1024x768,mode为“RGB”。它们按照第一张70%的透明度,第二张30%的透明度,合成为一张。

4、  Composite

定义:Image.composite(image1,image2, mask) ⇒ image

含义:使用给定的两张图像及mask图像作为透明度,插值出一张新的图像。变量mask图像的模式可以为“1”,“L”或者“RGBA”。所有图像必须有相同的尺寸。

例子:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")

>>>r,g,b = im01.split()

>>> g.mode

'L'

>>> g.size

(1024, 768)

>>> im= Image.composite(im01, im02, g)

>>>im.show()

5、  Eval

定义:Image.eval(image,function) ⇒ image

含义:使用变量function对应的函数(该函数应该有一个参数)处理变量image所代表图像中的每一个像素点。如果变量image所代表图像有多个通道,那变量function对应的函数作用于每一个通道。注意:变量function对每个像素只处理一次,所以不能使用随机组件和其他生成器。

例子:

>>>from PIL import Image

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> deffun(x):

return x * 0.5

>>>im_eval = Image.eval(im01, fun)

>>>im_eval.show()

>>>im01.show()

图像im01如下图:

图像im_eval如下图:

图像im_eval与im01比较,其像素值均为im01的一半,则其亮度自然也会比im01暗一些。

6、  Frombuffer

定义:Image.frombuffer(mode,size, data) ⇒ image

Image.frombuffer(mode, size,data, decoder, parameters) ⇒ image

含义:(New in PIL 1.1.4)使用标准的“raw”解码器,从字符串或者buffer对象中的像素数据产生一个图像存储。对于一些模式,这个图像存储与原始的buffer(这意味着对原始buffer对象的改变体现在图像本身)共享内存。并非所有的模式都可以共享内存;支持的模式有“L”,“RGBX”,“RGBA”和“CMYK”。对于其他模式,这个函数与fromstring()函数一致。

注意:版本1.1.6及其以下,这个函数的默认情况与函数fromstring()不同。这有可能在将来的版本中改变,所以为了最大的可移植性,当使用“raw”解码器时,推荐用户写出所有的参数,如下所示:

im =Image.frombuffer(mode, size, data, "raw", mode, 0, 1)

函数Image.frombuffer(mode,size, data, decoder, parameters)与函数fromstring()的调用一致。

例子:

7、  Fromstring

定义:Image.fromstring(mode,size, data) ⇒ image

Image.fromstring(mode, size,data, decoder, parameters) ⇒ image

含义:函数Image.fromstring(mode,size, data),使用标准的“raw”解码器,从字符串中的像素数据产生一个图像存储。

函数Image.fromstring(mode,size, data, decoder, parameters)也一样,但是允许用户使用PIL支持的任何像素解码器。更多信息可以参考:Writing YourOwn File Decoder.

注意:这个函数只对像素数据进行解码,而不是整个图像。如果用户的字符串包含整个图像,可以将该字符串包裹在StringIO对象中,使用函数open()来加载。

例子:

8、  Merge

定义:Image.merge(mode,bands) ⇒ image

含义:使用一些单通道图像,创建一个新的图像。变量bands为一个图像的元组或者列表,每个通道的模式由变量mode描述。所有通道必须有相同的尺寸。

变量mode与变量bands的关系:

len(ImageMode.getmode(mode).bands)= len(bands)

例子:

>>>from PIL import Image

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")

>>>r1,g1,b1 = im01.split()

>>>r2,g2,b2 = im02.split()

>>>r1.mode

'L'

>>>r1.size

(1024, 768)

>>>g1.mode

'L'

>>>g1.size

(1024, 768)

>>>r2.mode

'L'

>>>g2.size

(1024, 768)

>>>imgs=[r1,g2,b2]

>>>len(ImageMode.getmode("RGB").bands)

3

>>>len(imgs)

3

>>>im_merge = Image.merge("RGB", imgs)

>>>im_merge.show()

图像im_merge如下所示:

IMAGE模块0x1

【笔记】PIL 中的 Image 模块的更多相关文章

  1. PIL 中的 Image 模块

    转载:http://www.cnblogs.com/way_testlife/archive/2011/04/20/2022997.html   PIL 中的 Image 模块 本文是节选自 PIL ...

  2. Python学习笔记6-Python中re(正则表达式)模块学习

    今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的资料.这里主要介绍Python中常用的正则表达式处理函数. re.match re.match 尝试从 ...

  3. Python图像处理库:PIL中Image,ImageDraw等基本模块介绍

    Python图像处理库:PIL中Image,ImageDraw等基本模块介绍 标签: 图像处理PILPYTHON 2016-08-19 10:58 461人阅读 评论(0) 收藏 举报  分类: 其他 ...

  4. Python图像处理库PIL中图像格式转换

    o 在数字图像处理中,针对不同的图像格式有其特定的处理算法.所以,在做图像处理之前,我们需要考虑清楚自己要基于哪种格式的图像进行算法设计及其实现.本文基于这个需求,使用python中的图像处理库PIL ...

  5. Python图像处理库PIL中图像格式转换(一)

    在数字图像处理中,针对不同的图像格式有其特定的处理算法. 所以,在做图像处理之前,我们须要考虑清楚自己要基于哪种格式的图像进行算法设计及事实上现.本文基于这个需求.使用python中的图像处理库PIL ...

  6. [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设

    [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设 敲黑板!! <q>元素添加短引用,<blockquote>添加长引用 在段落里添加引用就使用< ...

  7. 如何在Meteor中使用npm模块?

    首先,请在AtmosphereJs上搜索有无相关的封装包.尽量采用已有的封装包,而不是自己封装. 有两种方法在项目中使用来自npm的模块. 封装为Meteor包并在项目中添加包.使用meteor cr ...

  8. python学习笔记系列----(四)模块

    这一章主要是叙述了python模块的概念以及包的概念,还有它们的使用:收获也是大大的. 提起python文件,经常会听到3个名词,python脚本,python模块,python包.脚本的概念是从py ...

  9. Python中的random模块,来自于Capricorn的实验室

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

随机推荐

  1. SpringMVC-异常处理器

    1.    异常处理思路 系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生. 系统 ...

  2. code与const void*指针

    关于指针: 当定义int *p时,它也会在内存中给指针变量p分配一个内存单元,假设这个单元在内存的编址为0x1003:此时,0x1003中的值是不确定的,(因为我们没有给指针赋值),当编译器遇到了p= ...

  3. 用java自带jdk开发第一个java程序

    [学习笔记] 1.用java自带jdk开发第一个java程序:   下面要讲的eclipse要想正常工作,需要先学会配置这里的jdk.jdk要想正常工作,需先学会配置JAVA_HOME和ClassPa ...

  4. kafka java api消费者

    import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Properties; imp ...

  5. 2、替换空格------------>剑指offer系列

    题目 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 代码 1.直接用空格将字符串切割成 ...

  6. poj2135 最小费用流

    添加超级源点(与点1之间的边容量为2,权值为0)和超级汇点(与点N之间的边容量为2,权值为0),求流量为2的最小费用流.注意是双向边. #include <iostream> #inclu ...

  7. 如何修改tomcat的启动方式为 run

    tomcat根目录\bin\startup.bat,记事本打开,找到: call "%EXECUTABLE%" start %CMD_LINE_ARGS% :end 把start ...

  8. Android学习总结(十)———— Intent的使用

    一.Intent的基本概念 我们已经学习完了Android的四大组件了,在四大组件中我们用得最多的是Intent-Filter.Intent含义就是你想利用它调用哪个组件实现相关的功能,比如调用相机组 ...

  9. css3 省略号

    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; 也无需给元素设置固定宽度!

  10. 在Ubuntu16.04安装YouCompleteMe

    作为从事了4年多嵌入式Linux工作的软件工程师,最近决定完全在ubuntu上工作,使用vim进行代码的阅读和编辑,然后尝试去安装vim相关的各种插件.从来没用过代码补全的我,在网上找到了插件omni ...