本文使用的包为:imageio
基本用法及参数解释:
介绍完了,上代码!
import imageio
def create_gif(image_list,gif_name,duration=0.5):
"""
:param image_list: 原始图片,png
:param gif_name: gif的文件名
:param duration: 间隔时间
path:路径
:return:
"""
frames = []
for image_name in image_list:
frames.append(imageio.imread(image_name))
#保存为GIF
imageio.mimsave(gif_name,frames,'GIF',duration = duration)
return
#这个duration表示的是:
def main():
image_list = ['1.png','2.png','3.png','4.png']
gif_name = 'first.gif'
duration = 1.5
create_gif(image_list,gif_name)
#当前程序被当作主程序运行时, __ name__被自动赋值为固定的字符串__main__;当它被当作模块被其他文件调用时,自动被赋值为模块所在的文件名
if __name__ == '__main__':
main()
在这里就顺便记一下if name == ‘main‘的具体用法及说明(其实我之前真的不是很理解这行代码)
__name__本身其实就是一个变量,当前程序被当作主程序运行时, __ name__被自动赋值为固定的字符串__main__;当它被当作模块被其他文件调用时,自动被赋值为模块所在的文件名
报错解决:
忽然发现是少打了一个字母,上面的代码是修改过的,请放心使用!( ̄▽ ̄)~*
import imageio
import matplotlib.pyplot as plt
from pygifsicle import optimize
n = 100
gif_path = "test.gif"
frames_path = "{i}.jpg"
n = 100
plt.figure(figsize=(4,4))
for i, x in enumerate(range(n)):
plt.scatter(x/n, x/n)
plt.xlim(0, 1)
plt.ylim(0, 1)
plt.savefig("{i}.jpg".format(i=i))
with imageio.get_writer(gif_path, mode='I') as writer:
for i in range(n):
writer.append_data(imageio.imread(frames_path.format(i=i)))
optimize(gif_path)
这是官方的GIF优化的方法!
其他有趣的操作!
图片操作
将指定颜色变透明 只能保存 png jpg
/**
* 将指定颜色变透明 只能保存 png jpg
*
* @param imageSrc
* @param mask
* @return
*/
public static BufferedImage createImageByMaskColorEx(
BufferedImage imageSrc, Color mask) {
int x, y;
x = imageSrc.getWidth(null);
y = imageSrc.getHeight(null);
BufferedImage imageDes = new BufferedImage(x, y,
BufferedImage.TYPE_4BYTE_ABGR);
WritableRaster rasterDes = imageDes.getRaster();
int[] des = new int[4];
while (--x >= 0)
for (int j = 0; j < y; ++j) {
int rgb = imageSrc.getRGB(x, j);
int sr, sg, sb;
sr = (rgb & 0xFF0000) >> 16;
sg = (rgb & 0xFF00) >> 8;
sb = rgb & 0xFF;
if (sr == mask.getRed() && sg == mask.getGreen()
&& sb == mask.getBlue()) {
des[3] = 0;
} else {
des[0] = sr;
des[1] = sg;
des[2] = sb;
des[3] = 255;
}
rasterDes.setPixel(x, j, des);
}
return imageDes;
}
按倍率缩小图片
/**
* 按倍率缩小图片
*
* @param imageSrc 读取图片路径
* @param imageDest 写入图片路径
* @param widthRatio 宽度缩小比例
* @param heightRatio 高度缩小比例
*/
public static void reduceImageByRatio(String imageSrc, String imageDest, int widthRatio, int heightRatio) {
FileOutputStream outputStream = null;
try {
File file = new File(imageSrc);
BufferedImage read = ImageIO.read(file);
int width = read.getWidth();
int height = read.getHeight();
/**
* 根据缩放比较 构建新的BufferImage 对象
*/
BufferedImage destBufferImage = new BufferedImage(width / widthRatio, height / heightRatio, BufferedImage.TYPE_INT_RGB);
/**
* 绘制 缩小 后的图片
*/
destBufferImage.getGraphics().drawImage(read, 0, 0, width / widthRatio, height / heightRatio, null);
outputStream = new FileOutputStream(imageDest);
ImageIO.write(destBufferImage, "jpg", outputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
指定图形的长和宽
/**
* 指定图形的长和宽
*
* @param iamgeSrc
* @param imageDest
* @param width
* @param height
* @throws IOException
*/
public static void resizeImage(String iamgeSrc, String imageDest, int width, int height) {
FileOutputStream outputStream = null;
try {
//读入文件
File file = new File(iamgeSrc);
// 构造Image对象
BufferedImage src = javax.imageio.ImageIO.read(file);
// 放大边长
BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//绘制放大后的图片
tag.getGraphics().drawImage(src, 0, 0, width, height, null);
outputStream = new FileOutputStream(imageDest);
outputStream = new FileOutputStream(imageDest);
ImageIO.write(tag, "jpg", outputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
更多操作请看:https://blog.csdn.net/baidu_28665563/article/details/82887485