PHP《将画布(canvas)图像保存成本地图片的方法》

用PHP将网页上的Canvas图像保存到服务器上的方法

2014年6月27日 歪脖骇客 发表回复

  • 8

在几年前HTML5还没有流行的时候,我们的项目经理曾经向我提出这样一个需求:让项目评审专家们在评审结束时用笔在平板电脑上进行电子签名。 这需要我们评审软件里提供这样一个功能:打开浏览器,登录,进入评审意见页,页面最下部有个方块区域,用户在这里用触摸笔进行签名,然后这个签名将会保持 的服务器上。

这样的一个需求在当时是让我大费周折,但如今想起来,如果用html5的canvas实现,真是太简单了。在《将画布(canvas)图像保存成本地图片的方法》这篇文章里就有一个只用了几行代码就实现了的画板功能——很简单,虽然有一个小bug——但完全能当作签名用。

我之前说了很多如何将canvas图像保存成图片并下载的方法,但这些方法都是将图片保存到客户端,而我们的签名需求是需要将canvas的内容保存到服务器端,如何实现?

其实很简单,看完下面的这段PHP代码,相信你也会觉得很简单。

<?php
	// requires php5
	define(‘UPLOAD_DIR‘, ‘images/‘);
	$img = $_POST[‘img‘];
	$img = str_replace(‘data:image/png;base64,‘, ‘‘, $img);
	$img = str_replace(‘ ‘, ‘+‘, $img);
	$data = base64_decode($img);
	$file = UPLOAD_DIR . uniqid() . ‘.png‘;
	$success = file_put_contents($file, $data);
	print $success ? $file : ‘Unable to save the file.‘;
?>

从网页上传到服务器端的图片是base64_encode转码过的Data URL格式,数据在服务器端用base64_decode进行解码,保存成文件。我在上篇文章中提到的那个火狐浏览器的微博图文分享工具,在服务器端就是用到了这段代码。

有一天你也会需要用到它的,很有用的代码,收藏一下吧!

时间: 2024-10-12 22:27:28

PHP《将画布(canvas)图像保存成本地图片的方法》的相关文章

PHP &lt;&lt;EOF EOF的使用方法

PHP <<EOF EOF的使用方法 <?php     $name = '浅水游';     print <<<EOT             <html>             <head>             <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />             <t

stream.fail() eof() EOF

ifstream infile("student.dat"); while((c=infile.get())!=EOF){}    //EOF的值是-1 但在 #include<iostream>using namespace std;int main(){ int c; while((c=cin.get()) !=EOF) cout<<c<<endl;} 中,输入-1 却不会终止    因为输入-1,程序是按照 - 和 1 两个字符接收的.get(

(转)PHP EOF(heredoc)的使用方法

Heredoc技术,在正规的PHP文档中和技术书籍中一般没有详细讲述,只是提到了这是一种Perl风格的字符串输出技术.但是现在的一些论坛程序,和部分文章系统,都巧妙的使用heredoc技术,来部分的实现了界面与代码的准分离,phpwind模板就是一个典型的例子. 如下: <?php $name = '浅水游'; print <<<EOT <html> <head> <meta http-equiv="Content-Type" co

Linux CAT与ECHO命令详解 &lt;&lt;EOF EOF

Linux CAT与ECHO命令详解 cat命令是Linux下的一个文本输出命令,通常是用于观看某个文件的内容的: cat主要有三大功能: 1.一次显示整个文件. $ cat filename 2.从键盘创建一个文件. $ cat > filename 只能创建新文件,不能编辑已有文件. 3.将几个文件合并为一个文件. $cat file1 file2 > file cat具体命令格式为 : cat [-AbeEnstTuv] [--help] [--version] fileName 说明:

(转)C语言中的EOF和feof()

今天遇到了feof()判断文件结束多输出一行的问题,在网上看到一篇写得比较好的文章,转过来(誊写一遍)加深印象.原文地址:http://blog.csdn.net/flyyyri/article/details/5084981 1.EOF是标准库中的宏定义,#define EOF -1,在32位系统中是int型数据,表示为0xFFFFFFFF,EOF 不是一个字符,也不是文件中实际存在的内容.EOF不但能表示读文件到了结尾这一状态,它还能表示 I/O 操作中的读.写错误(可以用 ferror()

php 的定界符 &lt;&lt;&lt;eof

PHP是一个Web编程语言,在编程过程中难免会遇到用echo来输出大段的html和javascript脚本的情况,如果用传统的输出方法 --按字符串输出的话,肯定要有大量的转义符来对字符串中的引号等特殊字符进行转义,以免出现语法错误.如果是一两处还可以容忍,但是要是一个完整的 html文本或者是一个200行的js我想是谁都会崩溃的.这就是PHP为什么要引入一个定界符的原因--至少一大部分原因是这样的. 1.PHP定界符的作用就是按照原样,包括换行格式什么的,输出在其内部的东西:2.在PHP定界符

php的定界符&lt;&lt;&lt;eof的问题

在php的编程过程中难免会遇到输出大段的html和javascript脚本的情况,可都放在具体的地方的时候,路由不好处理,而且比较浪费时间 如果按照传统的输出方法,按照字符串输出的话,需要大量的转义字符串对字符串中的特殊字符进行转义 麻烦又费时间,还容易出现语法错误 php定界符的作用就是划分出来一片区域,将其中的的格式和内容按照原样输出. php定界符中的任何特殊字符都不需要转义 php.定界符中的变量会被正常的用其值来替换 <<<eof . eof; 如果使用的过程中出现错误, 检查

理解feof与EOF

feof(feof msdn) feof用于判断文件结尾.头文件<cstdio>.使用方法是feof(fp),fp为指向需要判断的文件的指针.如果不到文件结尾,返回0值:如果是文件结尾,返回非0. 使用feof判断文件结尾一定要非常注意以下一点: 假设文件包含10字节,并且你读取了十字节,调用feof函数,函数返回值均为0,这是因为尽管文件指针这时已经指向文件尾了,但是你没有试图越过文件尾读取数据,只有当你尝试了读取第十一个字节时,调用feof,函数才会返回0. 因此,使用feof常用的逻辑结

php 的定界符 &lt;&lt;&lt;eof 的问题

PHP是一个Web编程语言,在编程过程中难免会遇到用echo来输出大段的html和javascript脚本的情况,如果用传统的输出方法 ——按字符串输出的话,肯定要有大量的转义符来对字符串中的引号等特殊字符进行转义,以免出现语法错误.如果是一两处还可以容忍,但是要是一个完整的 html文本或者是一个200行的js我想是谁都会崩溃的.这就是PHP为什么要引入一个定界符的原因——至少一大部分原因是这样的.1.PHP定界符的作用就是按照原样,包括换行格式什么的,输出在其内部的东西:2.在PHP定界符中

PHP定界符eof 的使用

PHP是一个Web编程语言,在编程过程中难免会遇到用echo来输出大段的html和javascript脚本的情况,如果用传统的输出方法 --按字符串输出的话, 肯定要有大量的转义符来对字符串中的引号等特殊字符进行转义,以免出现语法错误.如果是一两处还可以容忍, 但是要是一个完整的 html文本或者是一个100行的js我想是谁都会崩溃的.这就是PHP为什么要引入一个定界符的原因--至少一大部分原因是这样的. 1.PHP定界符的作用就是按照原样,包括换行格式什么的,输出在其内部的东西:2.在PHP定