精华内容
下载资源
问答
  • gif图片文字

    2017-08-18 13:41:16
    gif图片文字
  • gif动态图片文字图文教程.docx
  • gif动态图片如何文字.docx
  • gif格式图片文字

    2011-05-04 17:11:59
    gif格式水印,网上找的很多代码都是不全的,缺少dll就是这个文件里的,这个也是网上找到的,放到这里主要和大家共享,顺便赚点下载分。 进过测试,打水印之后gif完全不影响。但是大小会增加,72k的增加值112k。
  • 从网上搜索JAVA相关生成GIF加文字或者加水印会发现已经有很多已经实现的了,不过大都是使用gif4j进行的合成,这种做法个人使用肯定是没有什么问题,但是要自己公司用或者用于商用的话,就会有很多的License问题,...

    之前一直觉得实现在图片上添加文字很厉害,后来机缘巧合之下,我也需要自己去实现这个步骤,所以在下面梳理一下踩过的坑和实现的原理,希望能帮到大家。

    从网上搜索JAVA相关生成GIF加文字或者加水印会发现已经有很多已经实现的了,不过大都是使用gif4j进行的合成,这种做法在个人使用肯定是没有什么问题,但是要自己公司用或者用于商用的话,就会有很多的License问题,秉着能省则省的原则,所以打算另辟蹊径。

    首先要感谢Kevin Weiner提供的实现基础。这是工具类的链接,实现原理就是基于这个来实现的。

    链接:https://github.com/rtyley/animated-gif-lib-for-java 尊重原版。

    先贴实现代码:

    public static void main(String[] args) throws Exception {
            
        	long timestart = System.currentTimeMillis();
        	
        	InputStream inputStream1 = new FileInputStream("C:\\Users\\TMP\\3_5.gif");
        	
        	new ImageUtil2().getGifSticker("测试问题","SIMSUN.ttf",inputStream1);
        	
        	long timeend = System.currentTimeMillis();
        	System.out.println("用时"+(timeend-timestart));
        	
        	
        }
    
    public void getGifSticker(String markContent,String fontName, InputStream inputStream) throws FontFormatException, IOException  {
    		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    		try {
    			GifDecoder decoder = new GifDecoder();
    			//读入gif数据流
    			decoder.read(inputStream);
    			//获取GIF的宽高
    			Dimension dimension = decoder.getFrameSize();
    			int height = (int)dimension.getHeight();
    			//获取字体问津数据流,用于规范生成文字的字体格式
    			InputStream intput = ImageUtil2.class.getResourceAsStream(fontName);
    			//生成字体
    			Font font1 = Font.createFont(Font.TRUETYPE_FONT, intput);
    			//要是想使用deriveFont设置字体大小必须重新指定Font,而且不支持整数型,只能使用浮点类型
    			Font font = font1.deriveFont(25.0f);
    			//读取帧数
    			int frameCount = decoder.getFrameCount();
    			AnimatedGifEncoder encoder = new AnimatedGifEncoder();
    			String url = "C:\\Users\\TMP\\o\\" + + System.currentTimeMillis()+".gif";
    			encoder.start(url);
    			encoder.setRepeat(0);
    			Graphics2D g = null;
    			/**
    			 * 对GIF进行拆分
    			 * 每一帧进行文字处理
    			 * 组装
    			 */
    			for (int i = 0; i < frameCount; i++) {
    				//初始化图像
    				g =  (Graphics2D) decoder.getFrame(i).getGraphics();
    				/**
    				 * RenderingHint是对图片像素,锯齿等等做的优化,可保证生成的图片放大锯齿点阵也不会很明显
    				 */
    				g.setRenderingHint(SunHints.KEY_ANTIALIASING, SunHints.VALUE_ANTIALIAS_ON);
    			    g.setRenderingHint(SunHints.KEY_TEXT_ANTIALIASING, SunHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
    //			    g.setRenderingHint(SunHints.KEY_STROKE_CONTROL, SunHints.VALUE_STROKE_PURE);
    //			    g.setRenderingHint(SunHints.KEY_TEXT_ANTIALIAS_LCD_CONTRAST, 100);
    //			    g.setRenderingHint(SunHints.KEY_FRACTIONALMETRICS, SunHints.VALUE_FRACTIONALMETRICS_OFF);
    //			    g.setRenderingHint(SunHints.KEY_RENDERING, SunHints.VALUE_RENDER_DEFAULT);
    				g.setColor(Color.black); 
    				g.setFont(font);
    				g.setFont(font);
                    //设置打印文字和坐标
    				g.drawString(markContent, 12, 81);
    				g.dispose();
    				//组装每一帧
    				encoder.addFrame(decoder.getFrame(i));
    				//设置每帧的切换时间
    				if (i != frameCount - 1) {
    					encoder.setDelay(decoder.getDelay(i));
    				}
    			}
    			encoder.finish();
    			byte b[] = outputStream.toByteArray();
    		}finally {
    			try {
    				if (null != outputStream)
    					outputStream.close();
    			} catch (IOException e) {
    				
    			}
    		}
    	}

    传入参数 :markContent : 生成文字 fontName 字体文字  inputStream 图片数据流

    原理分析:

    根据传入的字体文字去当先CLASSPATH下面找到对应字体文件(建议使用ttf文件,对otf的支持还不是很理想,要想要没有License的ttf字体文件欢迎私聊)。

    然后根据传入的image数据流进行操作,代码的分析我都在注释中有声明。

    后来发现每次生成的所有GIF虽然都很正常,但是发现放大来看文字会有点阵锯齿问题,研究良久,对这个问题也颇有了解,后来根据JDK源码进行了优化,使用边缘抖动模糊进行的一个处理,这样的话如果放大的话边缘处也会很平滑,但是有一点缺点就是会有略微的模糊,不过对比来看,问题不大!

    锯齿优化思路如下:

    由于是使用的Graphics2D进行的图像的制作和渲染,所以这个支持RenderingHints的一个处理,关于RenderingHints声明如下:

     * The {@code RenderingHints} class defines and manages collections of  keys and associated values which allow an application to provide input  into the choice of algorithms used by other classes which perform rendering and image manipulation services.
     * The {@link java.awt.Graphics2D} class, and classes that implement  {@link java.awt.image.BufferedImageOp} and  {@link java.awt.image.RasterOp} all provide methods to get and  possibly to set individual or groups of {@code RenderingHints}  keys and their associated values.
     * When those implementations perform any rendering or image manipulation  operations they should examine the values of any {@code RenderingHints}  that were requested by the caller and tailor the algorithms used accordingly and to the best of their ability.
     * <p>
     * Note that since these keys and values are <i>hints</i>, there is  no requirement that a given implementation supports all possible  choices indicated below or that it can respond to requests to modify its choice of algorithm.
     * The values of the various hint keys may also interact such that  while all variants of a given key are supported in one situation,
     * the implementation may be more restricted when the values associated with other keys are modified.
     * For example, some implementations may be able to provide several types of dithering when the antialiasing hint is turned off, but  have little control over dithering when antialiasing is on.
     * The full set of supported keys and hints may also vary by destination since runtimes may use different underlying modules to render to  the screen, or to {@link java.awt.image.BufferedImage} objects,  or while printing.
     * <p>
     * Implementations are free to ignore the hints completely, but should  try to use an implementation algorithm that is as close as possible to the request.
     * If an implementation supports a given algorithm when any value is used  for an associated hint key, then minimally it must do so when the  value for that key is the exact value that specifies the algorithm.
     * <p>
     * The keys used to control the hints are all special values that  subclass the associated {@link RenderingHints.Key} class.
     * Many common hints are expressed below as static constants in this class, but the list is not meant to be exhaustive.
     * Other hints may be created by other packages by defining new objects  which subclass the {@code Key} class and defining the associated values.

    粗略翻译如下:

    * {@code RenderingHints}类定义和管理键和相关值的集合,允许应用程序为执行渲染和图像处理服务的其他类所使用的算法选择提供输入。
     * {@link java.awt.Graphics2D}类和实现{@link java.awt.image.BufferedImageOp}和{@link java.awt.image.RasterOp}的类都提供了获取和可能设置个体的方法或{@code RenderingHints}键组及其相关值。
     *当这些实现执行任何渲染或图像处理操作时,他们应检查调用者请求的任何{@code RenderingHints}的值,并根据他们的能力量身定制所使用的算法。
     * <p>
     *请注意,由于这些键和值是<i>提示</ i>,因此不要求给定的实现支持下面指出的所有可能的选择,或者它可以响应修改其算法选择的请求。
     *各种提示键的值也可以相互作用,以便在一种情况下支持给定键的所有变体,
     *当修改与其他键相关联的值时,实现可能会受到更多限制。
     *例如,某些实现可能能够在关闭抗锯齿提示时提供几种类型的抖动,但在打开抗锯齿时几乎无法控制抖动。
     *完整的受支持的键和提示集也可能因目的地而异,因为运行时可能使用不同的底层模块呈现到屏幕,或{@link java.awt.image.BufferedImage}对象,或者在打印时。
     * <p>
     *实现可以完全忽略提示,但应该尝试使用尽可能接近请求的实现算法。
     *如果某个实现支持给定的算法,当任何值用于关联的提示键时,那么当该键的值是指定算法的确切值时,它必须最低限度地执行此操作。
     * <p>
     *用于控制提示的键都是特殊值,它们是关联的{@link RenderingHints.Key}类的子类。
     *许多常见提示在下面表示为此类中的静态常量,但该列表并不是详尽无遗的。
     *其他提示可以通过定义新的对象来创建,这些对象继承了{@code Key}类并定义了相关的值。

    所以我在本地使用的优化有这些:

    g.setRenderingHint(SunHints.KEY_ANTIALIASING, SunHints.VALUE_ANTIALIAS_ON);
    			    g.setRenderingHint(SunHints.KEY_TEXT_ANTIALIASING, SunHints.VALUE_TEXT_ANTIALIAS_DEFAULT);
    //			    g.setRenderingHint(SunHints.KEY_STROKE_CONTROL, SunHints.VALUE_STROKE_PURE);
    //			    g.setRenderingHint(SunHints.KEY_TEXT_ANTIALIAS_LCD_CONTRAST, 100);
    //			    g.setRenderingHint(SunHints.KEY_FRACTIONALMETRICS, SunHints.VALUE_FRACTIONALMETRICS_OFF);
    //			    g.setRenderingHint(SunHints.KEY_RENDERING, SunHints.VALUE_RENDER_DEFAULT);

    第一行是说明对整个图画的一个矩阵优化,当然如果你和我一样是在图片上添加文字的话,第一行就和第二行没有什么区别。
    简而言之,前两行都是对图片点阵锯齿的一个模糊话处理,但是JDK中也说了,会有不可控的抖动会出现,所以在原图放大来看会略微模糊一点。

    支持并发,每次读入的图片数据库都有close不用手动去关闭。

    以上。

     

    良心手打,有疑问或者好的优化建议欢迎找茬。

    展开全文
  • 怎么在GIF动态图中添加文字

    千次阅读 2019-10-22 16:00:35
    GIF动态图片其实就是多张不同的图片放在一起无限循环播放,我们的生活中很多地方都...但是如果要这些GIF动图添加自己想要的文字该怎么做呢,这里我就教你们一个简单的方法。 1、首先要电脑打开这个制作GI...

    GIF动态图片其实就是多张不同的图片放在一起无限循环播放,在我们的生活中很多地方都可以看到它的身影,而用的最多的地方就是微信和QQ等一些社交软件,人们在聊天的时候总喜欢用GIF动态图来表达自己的意思,这些动态图片中除了几张不同的图片以外,有些好带有一些字幕,可以表达的更清楚。但是如果要在这些GIF动图上添加自己想要的文字该怎么做呢,这里我就教你们一个简单的方法。

    1、首先要在电脑上打开这个制作GIF的工具。

    在这里插入图片描述

    2、打开之后会进入到一个选择界面,里面有启动屏幕录制和启动GIF编辑器两个功能选项。这里我们直接选择后面一个GIF编辑器。

    在这里插入图片描述

    3、启动之后回来到一个编辑界面,但在编辑之前要先将要添加文字的GIF导入到这个界面中。点击左上角的“添加文件”即可在电脑文件中选择GIF进行导入。

    在这里插入图片描述

    4、GIF导入完成后会出现在编辑界面面的中间部分,在下方还可以看到它的帧数。你可以这个GIF进行预览,来确定要添加文字的帧。

    在这里插入图片描述

    5、确定好帧之后就可以开始添加文字的操作了,先点击一下页面上方插入工具栏中的“文字”按钮,在出现的输入框中输入要添加的文字,再将GIF图中的文字移动到合适的位置。然后点击“应用”。

    在这里插入图片描述

    6、这样文字就添加完成了,剩下的就是导出了,在页面右上角有个“导出GIF”,点击一下就可选择文件保存的位置进行导出和保存。

    在这里插入图片描述

    以上就是在电脑上给GIF动态图添加文字的方法和操作了,如果你觉得这个方法还不错的话,不妨去试一试这个方法。

    展开全文
  • 用photoshop给gif批量水印

    千次阅读 2015-10-09 20:55:00
    最近有一个任务是给gif加水印,用格式工厂可以批量处理,但是最后的文件大小不敢保证,这里说一下用photoshop cs5给gif批量加水印的方法。 1.打开ps,打开要处理的gif图片 alt+F9或者窗口-动作,新建一个动作(右下角...

    最近有一个任务是给gif加水印,用格式工厂可以批量处理,但是最后的文件大小不敢保证,这里说一下用photoshop cs5给gif批量加水印的方法。

    1.打开ps,打开要处理的gif图片

    alt+F9或者窗口-动作,新建一个动作(右下角倒数第二个),起个名字后录制
    2.新建一个图层,在图层上加文字或者图片水印(打开另一张图片拖过来就行)
    3.选中加水印的图层,ctrl+shift+],将它置于图层最上面
    4.文件-存储问web或设备所用格式,如果需要调参数调好之后点存储。
    5.随便放入文件夹中,注意这个文件夹名字一定要是英文的,不能包含中文,不然批处理将无法识别输出的文件夹(这个问题困扰了我好久)。
    6.存储完之后点击停止录制动作(动作面板第二个)。
    7.接下来完成批处理,文件-自动-批处理,在动作选择刚刚录好的动作,源就是要处理的文件夹,目标文件夹随便选一个,把覆盖动作中的“存储为”命令勾上(因为是要存储为web格式),文件命名随意,然后错误-将错误记录到文件,存储为选择记录错误的位置(会生成txt文件记录错误)

    8.设置好参数后点击确定。在第4步存储的文件夹中查看效果。
    展开全文
  • gif图片批量添加水印。新生成的了水印的gif与原gif保真度很高,体积变化不超过10%。有运行示例。
  • 用python实现了给gif图片添加文字可改变位置颜色字体等
  • 这样用下面的代码: draw.text(( 10, 10), '李兴球Python', font=myfont,fill='red')) 就能im图像坐标为(10,10)红色的,字体为myfont的了。注意坐标是以图像的右角为原点的。 我们还需要知道...
    Python给gif图片加文字水印
    标题

    为了成批地给图像增加水印,我们这里用到了枕头模块。它的英文名为pillow。安装它的方式为用cmd命令打开DOS提示符窗口,然后输入pip install pillow即可。就像下面这样:

    python安装pillow模块方法
    python安装pillow模块方法

    安装好了pillow模块后,就能使用里面的类或者子模块等了。为了能给图片增加水印,我们需要导入 Image类 、ImageFont类、ImageDraw类、ImageSequence类。用下面的命令即可完成这个任务:

    from PIL import Image,ImageFont,ImageDraw,ImageSequence

    上面导入的Image是一个类。它有open方法能打开一张图片,加载到内存中。然后我们就能对这张图片进行各种处理了。下面的代码就能打开一张在c盘的名为风火轮编程的图片,并且返回im,以用来引用这张加载到内存中的图片。

    im = Image.open('c:/风火轮编程.png')

    Image类还有new方法能新建一张在内存中的图片。如下面的代码:

    im = Image.new("RGBA",(100,100),color=(255,0,0))

    它能新建一张100x100像素的RGBA模式的红色图片。当然,我们把它命名为im。在new命令中,第一个参数“RGBA”表示新建的图形的模式是RGBA模式。第二个参数表示图形的宽度和高度。第三个参数color参数。想必地球人都知道,这是颜色的意思。这里是指定图像的颜色为红色。它用的是三元组(255,0,0)表示的。这是RGB即红绿蓝三元色表示法。由于新建的图像为RGBA模式,所以其实这张图片还有一个通道,用来描述每个像素的透明度的。如果没有写,则默认为每个像素都是完全不透明的。在A通道中0表示完全透明,255表示完全不透明,所以上面的生成的图像每个像素值最终都是(255,0,0,255)。当然我们也可以指定A通道的值。把命令写成下面这样:

    im = Image.new("RGBA",(100,100),color=(255,0,0,127))

    那么im就是一张红色半透明的在内存中的图像了。如果不太清楚图像的三元色RGB(红绿蓝)表示法,请查阅相关文档。这里不在赘述。刚才建立的这张图片是在内存中。如果需要把它保存在磁盘中,那么用im的save方法,在小括号里写上文件名即可。示例代码为:

    im.save('李兴球Python的半透明图像.png')

    mageFont是用来新建字体对象的,这样在写的时候就能描述字体的大小和字体类型。如代码,myfont = ImageFont.truetype("msyh.ttf", 12),就能新建一个字体为微软雅黑,字号为12号的字体对象。

    ImageDraw是用来在图像上建立绘画层的一个类。实例化它的对象后,就能在这个对象上做图。可以在上面画圆圈,写字等等。假设im对象是加载到内存中的图像,那么draw = ImageDraw.Draw(im)就能新建绘画层。这样用下面的代码:

    draw.text(( 10, 10), '李兴球Python', font=myfont,fill='red'))

    就能在im图像上坐标为(10,10)上写上红色的,字体为myfont的字了。注意坐标是以图像的右上角为原点的。

    我们还需要知道ImageSequence这个类的用途。它可以用来迭代图像中的每帧。所谓帧就是快速显示的一张图片。在gif图像或电影视频中,是有很多帧的,每帧图像可能显示的时间为0.1秒。那么每1秒就能显示10张图。这就是帧率,也就是fps为10。我们把gif图像打开,迭代每一张帧图像,然后给每一张图像用draw的写字命令写上文字说明。最后把所有的帧都合成为新的一张gif图像。这就是给gif图加水印的全过程。即拆帧,在帧上写字,合帧。下面的代码就能迭代每一帧:

    for frame in ImageSequence.Iterator(im):
    
        print(frame) # 打印这一帧,当然也可以保存在磁盘

    上面的代码迭代了每一帧,当把每一帧图像都修改完后。就要把它们合起来以形成gif文件。如何合帧?pillow模块的图像对象有save方法。它有append_images这个参数。寓意为添加的图像们。这可以指定一个帧列表。加上其它的参数,就能生成gif图片了。

    下面就是给gif添加文字水印的函数:

    def watermark_on_gif(in_gif,out_gif,text='scratch8'):
    
        """本函数给gif动图加水印"""
    
        frames = []
    
        myfont = ImageFont.truetype("msyh.ttf", 12)    # 加载字体对象
    
        im = Image.open(in_gif)                        # 打开gif图形
    
        water_im = Image.new("RGBA", im.size)          # 新建RGBA模式的水印图
    
        draw = ImageDraw.Draw(water_im)                # 新建绘画层
    
        draw.text(( 10, 10), text, font=myfont,fill='red')
    
        for frame in ImageSequence.Iterator(im):       # 迭代每一帧
    
        frame = frame.convert("RGBA")                  # 转换成RGBA模式
    
        frame.paste(water_im,None,water_mask)          # 把水印粘贴到frame
    
        frames.append(frame)                           # 加到列表中
    
        newgif = frames[0]                             # 第一帧
    
        # quality参数为质量,duration为每幅图像播放的毫秒时间
    
        newgif.save(out_gif,save_all=True,
                    append_images=frames[1:],quality=85,duration=100)
        im.close()

    由于gif图中的每一帧并不是RGBA模式,所以在上面的for循环中把frame转换成了RGBA模式。然后把water_im粘贴到了frame上。关于如何调用这个函数就不必要说了吧。完整的示例代码在本人的lixingqiu.com博客上有,请自行搜索Python给gif图片加文字水印就能找到这篇文章的全部示例源代码。

    展开全文
  • GifUtil给gif图片添加文字、图片水印

    千次阅读 2018-01-11 17:43:30
    最近做一个给gif图片添加图片水印的工作,网上查了下好多童鞋推荐使用gif4j。此将自己的使用过程此做下笔记。 操作步骤 下载gif4j jar 官方下载地址: http://www.gif4j.com/download.htm 由于该...
  • android实现gif图与文字混排

    千次阅读 2015-06-11 09:26:05
     github找到了这样一种方法,Github地址https://github.com/TracyZhangLei/android-gif-demo  由于我是截图,所以看不到动态效果,大家可以自己下载看一下。  我们首先来看一下该开源项目
  • JAVA利用Gif4j将GIF图片水印

    千次阅读 2011-11-25 17:19:10
    import java.awt.Color; import java.awt.Font; import java.awt.Point; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException;...import com.gif4j.GifDecoder; import
  • gif动态图批量水印方法

    千次阅读 2018-02-06 17:41:55
    网上一般只能给一张gif加水印而且步骤繁杂,今天教大家使用一款gif批量加水印工具。废话先不多说看截图 直接将你的gif图片拖拽进去,填写水印文字等一会就好了,先看参数设置 根据你的需求设置一下即可,...
  • 水印不过瘾,再来个gif图到左下角视频中,经常看视频,是不是有点像那些视频广告gif 加gif: ffmpeg -y -i test2 . mp4 -ignore_loop 0 -i test . gif -filter_complex overlay = 0 :H -h test_...
  • 动态Q闪字程序,含全部PHP
  • 包含 1.多张图片生成GIF,可以设置GIF的播放速度,可以保存 2.向图片添加文字功能。
  • 去除.gif图片中的文字

    千次阅读 2011-02-26 00:04:00
    教你去除.gif图片中的文字 朋友们,大家有没有遇到过这种情况,当我们找到一张很喜欢的.gif图片,可是图片却有一些多余的文字,我们很想把它去掉,换成自己喜欢的文字,可是却没办法?现在教大家一种...
  • asp.net如何图片上加水印文字

    千次阅读 2013-12-11 10:06:32
    为了保证网站图片的版权性和网络推广的可能性,有的客户可能需要网站的图片加上公司名称的水印。下面的代码就是介绍如何图片加上水印文字。
  • ulead gif animator动画制作 第三讲 实心旋转 第三讲 实心的旋转 1启动Ulead ...5点击效果选择进入场景和退出场景进入场景下选择放大旋转退出场景下选择缩小旋转然后输入画面帧10 6点击画面帧控制输入延迟时
  • UILabel添加gif动态图

    千次阅读 2017-08-25 11:05:50
    遇到一个新需求,需要富文本添加gif或者其他动态图,原来的使用的富文本不支持动态图,就研究下了国外大牛的demo,其实还是很简单的,主要原理就是把动态图切成一帧帧图片,然后利用NSTimer和动态图的周期循环...
  • 有时候我们要给gif加上水印的确不太方便,需要获取每一帧下来然后进行处理。...制作图片水印时候需要先传图片文件(png,jpg),上传成功后传需要制作的gif。 网址:http://tool.apizl.com/tools/gifsy.html   ...
  • gif图片格式解析

    千次阅读 2018-02-14 10:52:00
    转载:Gif文件格式gif图片格式解析飘飘白云整理参考:http://www.w3.org/Graphics/GIF/spec-gif89a.txt网络中文gif资料 简介:GIF(Graphics Interchange Format)是CompuServe公司开发的图像文件存储格式,1987年开发...
  • 点击下载出处:ulead gif animator v5.11中文破解版 ulead gif animator 5.11是一款非常...软件界面制作精良符合用户审美,操作流程简便,用户制作GIF图片的感觉,仿佛是流水线加工产品,所有需要的工具一应...
  • (PHP)图片文字和图片合成

    千次阅读 2017-08-23 19:07:55
    图片文字 $bigImgPath = 'backgroud.png'; $img = imagecreatefromstring(file_get_contents($bigImgPath)); //字体文件 $font = 'msyhl.ttc'; //字体颜色(RGB) $black = imagecolorallocate($img, 0,
  • gif在线制作

    千次阅读 2016-04-26 18:14:12
    先看一下这个GIF动画面板,速度,质量,移,下移,添加帧,删除帧,生成动画等按钮 4.现在点击这个添加帧5.就把左边的图片添加到GIF动画面板里了,这里是按比例缩小的预览图,生成时候还是原大的 6.现在给考拉...
  • 不足的是,由于各gif的频率不一致,输入多个不同gif时,有些gif可能看起来会慢一些 参考:http://www.41443.com/HTML/Android/20141110/204419.html 修改了原有的一些错误,更改了一些程序结构,以增强适应性,了注释和...
  • PHP实现图片文字/图案水印

    万次阅读 2017-03-29 18:43:37
    需求:一张背景图添加二维码(带不同),并且个人名字,联系方式和个人头像。思路:二维码和头像相当于往图片添加图片,个人姓名和联系方式相当于玩图片添加文字,这就是文字/图案水印了。思路就是上网百度...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,787
精华内容 28,714
关键字:

怎么在gif上加字