我正在使用Nihilogic的"Canvas2Image"JavaScript工具将画布图转换为PNG图像.我现在需要的是使用PHP将这个工具生成的base64字符串转换为服务器上的实际PNG文件.
简而言之,我目前正在做的是使用Canvas2Image在客户端生成文件,然后检索base64编码的数据并使用AJAX将其发送到服务器:
// Generate the image file
var image = Canvas2Image.saveAsPNG(canvas, true);
image.id = "canvasimage";
canvas.parentNode.replaceChild(image, canvas);
var url = 'hidden.php',
data = $('#canvasimage').attr('src');
$.ajax({
type: "POST",
url: url,
dataType: 'text',
data: {
base64data : data
}
});
Run Code Online (Sandbox Code Playgroud)
此时,"hidden.php"收到一个看起来像数据的数据块:image/png; base64,iVBORw0KGgoAAAANSUhEUgAABE ...
从现在开始,我非常难过.从我读过的内容来看,我认为我应该使用PHP的imagecreatefromstring函数,但我不确定如何从base64编码的字符串中实际创建一个实际的PNG图像并将其存储在我的服务器上.请帮助!
如果我没弄错的话,Google Docs提供了通过iFrame显示与网页存储在同一服务器上的PDF的方法,但我需要知道如何以跨浏览器的方式执行此操作.
HTML5中实现的新功能之一是download
锚标记的属性.此属性的好处是它为用户提供了下载在客户端应用程序中创建的内容的方法,例如图像(例如,从画布转换).
目前,对此功能的支持非常差,因此我想知道如何在浏览器中检测对此功能的支持.
我今天在jQuery.com上遇到过"代理模式"的概念,但是无法做出任何改变.显然它很有用,但我根本不理解这个想法,这对我来说听起来很陌生.有人可以用简单的语言向我解释,"好像我是一个3岁的孩子"?
在Web应用程序上,我需要处理大量高分辨率图像,这些图像会动态添加到DOM树中.它们已预先加载,然后添加到页面中.
检测这样的图像何时完成加载是一回事,为此我使用了该load
事件,但是如何使用Javascript 检测它何时在浏览器中完成呈现?使用高分辨率图像时,实际的绘画过程可能需要花费大量时间,因此了解它何时结束非常重要.
这是使用一元运算符"++"的测试情况:
var j = 0 ;
console.log(j);
j = j++;
console.log(j);
Run Code Online (Sandbox Code Playgroud)
为此,输出为:
0
0
Run Code Online (Sandbox Code Playgroud)
由于++运算符的位置位于操作数的后面,因此它的优先级低于赋值的优先级,我希望"j"首先接收自身的值(ie0),然后递增.那么为什么第二个console.log(j)
电话仍然显示为"0"?
为了清楚起见,我知道解决方案是:
// 1)
j++;
// 2)
++j;
// 3)
j += 1;
// 4)
j = ++j;
Run Code Online (Sandbox Code Playgroud)
但我需要知道为什么在这个特定情况下不进行增量步骤,而不是如何解决它!
我尝试使用Closure Compiler压缩我的javascript代码,并且编译代码生成了这两个错误:
JSC_TRAILING_COMMA:解析错误.IE8(及以下)将错误地解析数组和对象文字中的尾随逗号.如果您要定位较新版本的JS,请设置相应的language_in选项.在第379行字符0 fontFamily:jqTextareaDiv.css("font-family").replace(/ ["'] {1}/gi,""),
JSC_TRAILING_COMMA:解析错误.IE8(及以下)将错误地解析数组和对象文字中的尾随逗号.如果您要定位较新版本的JS,请设置相应的language_in选项.在第932行字符0 fontFamily:jqDiv.css("font-family"),
这两个错误似乎引用了这段代码:
var jqTextareaDiv = obj.target.parent().parent(),
style = { // the current, relevant style rules for the DIV nesting the textarea
fontFamily : jqTextareaDiv.css("font-family").replace(/["']{1}/gi,""),
fontSize : jqTextareaDiv.css("font-size"),
fontStyle : jqTextareaDiv.css("font-style"),
fontWeight : jqTextareaDiv.css("font-weight"),
textDecoration : jqTextareaDiv.css("text-decoration"),
textAlign : jqTextareaDiv.css("text-align"),
color : jqTextareaDiv.css("color"),
},
jqToolbox = $('#text-edit-toolbox'),
jqIndicators = {
fontFamily : $('#font-family-indicator'),
fontSize : $('#font-size-indicator'),
fontStyle : $('#font-format-indicators .font-style'),
fontWeight : $('#font-format-indicators .font-weight'),
textDecorationUnderline : $('#font-format-indicators …
Run Code Online (Sandbox Code Playgroud) 我整理了一个小的测试Web应用程序,它将HTML画布转换为图像(通过使用Nihilogic的canvas2image JavaScript库),然后用生成的图像替换画布并显示一条消息,通知用户触摸(长)该图像以便把它保存到手机上.
我遇到的问题是Android的默认Web浏览器("Internet")不呈现代表图像的base64编码数据流,而是显示问号标记.有办法解决这个问题吗?如果是,那怎么样?
最近我遇到了一些与使用POST方法进行的AJAX调用的字符编码相关的非常奇怪的行为.总而言之,我有一个带有文本字段的HTML表单,可以接受变音符号(例如" ä ").提交表单时,表单数据将包装在XML块中并发送到服务器,服务器将该信息存储在MySQL数据库中.随后,从数据库中检索该信息并按原样显示给普通用户.
如果请求是从Chrome或IE发送的,那么一切都很好.这意味着包括变音符号在内的数据被发送,存储,然后检索并正确显示.但是,当我使用Firefox时,XML似乎正确地提交表单数据,但是当我重新加载网页时,之前发送的变音符号不会出现.换句话说,他们似乎在途中迷失了方向.例如,如果XML包含单词" tästä ",当我加载页面时,我看到" tst ".
为什么会这样?Firefox对邮件消息的编码方式与IE和Chrome不同吗?
如果它有帮助,我已经附加了Chrome和Firefox的请求和响应标题,用于完全相同的表单内容 - 只有一个例子:
顺便说一句,我没有在将数据发送到服务器之前对数据进行编码,只是简单地检索表单字段的值.
铬:
XML数据块:
<request>
<session>{hidden by me}</session>
<builder>Hem i Stan tästä</builder>
</request>
Run Code Online (Sandbox Code Playgroud)
请求标头:
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Content-Length:562
Content-Type:application/x-www-form-urlencoded
Cookie:PHPSESSID=rlne2d787j0np52ec5rtn04dm1
Host:83.150.87.220
Origin:http://hidden.by.me
Referer:http://http://hidden.by.me/?c=2094211
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
X-Requested-With:XMLHttpRequest
Run Code Online (Sandbox Code Playgroud)
响应标头:
Connection:Keep-Alive
Content-Encoding:gzip
Content-Type:application/xml
Date:Mon, 17 Sep 2012 16:21:58 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.2.11 (Win32) PHP/5.2.9-1
Transfer-Encoding:chunked
Vary:Accept-Encoding
Run Code Online (Sandbox Code Playgroud)
FIREFOX:
XML数据块:
<request>
<session>{hidden by me}</session>
<builder>Hem i Stan tästä</builder>
</request>
Run Code Online (Sandbox Code Playgroud)
请求标头:
Accept */*
Accept-Encoding …
Run Code Online (Sandbox Code Playgroud) 需要开发一个Web应用程序,同时高度依赖于API但同时不能与API本身驻留在同一个域中,在进行异步HTTP请求时绕过"同源策略"非常棘手(AJAX).有一次,我建议在我的计算机上安装WAMP(运行Windows 7)并使用Apache配置反向代理.同一个人给了我下面的Apache指令,我httpd.conf
告诉我在文件中创建名为dev的IP 127.0.0.1的别名后,我添加到文件中c:\windows\system32\drivers\etc\hosts
(我做了):
LoadModule headers_module modules/mod_headers.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule ssl_module modules/mod_ssl.so
Listen 127.0.0.1:8080
ProxyRequests off
<Proxy *>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Proxy>
<VirtualHost dev:8080>
ProxyPass / https://app.somesite.com:5002/
ProxyPassReverse / https://app.somesitecom:5002/
ProxyPassReverseCookieDomain app.somesite.com dev
Header edit Location ^https://dev(:8080)?(.+)$ http://dev$1$2
Header edit Set-Cookie "(^.+); secure; HttpOnly$" "$1; HttpOnly"
SSLProxyEngine on
SSLProxyVerify none
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
由于我在配置服务器时是一个完整的新手,我只是粘贴了指令,幸运的是,代理工作了.例如,当我使用浏览器的地址栏访问时,它会从API返回正确的响应http://dev:8080/a/w/currencies
.
不幸的是,对同一网址(代码如下)的AJAX请求会让Chrome给我XMLHttpRequest cannot load http://dev:8080/a/w/currencies. Origin http://dev is not …
javascript ×8
ajax ×2
html5-canvas ×2
android ×1
apache ×1
base64 ×1
cross-domain ×1
dom-events ×1
firefox ×1
html ×1
html5 ×1
image ×1
pdf ×1
php ×1
wampserver ×1