使用PHP和jQuery快速旋转图像
我写了一个Python脚本,可以把图片旋转90度。如果你想看看代码,我把它放在下面;
#! /usr/bin/python
# This Python file uses the following encoding: utf-8
#argv[1] needs to be send formatted meaning spaces and paranthesis ARE problems
__author__="john"
__date__ ="$Aug 17, 2010 1:48:36 PM$"
server_directory="some_directory"
import os
import os.path
import sys
import Image
#for turkish characters
def tr(utf):
return utf.decode('utf-8')
img_directory=sys.argv[1]
img_directory_orig=img_directory.replace("\ ", " ")
file_url_and_name=server_directory+img_directory_orig
im = Image.open(file_url_and_name)
im1=im.rotate(270)
out=file(file_url_and_name,"w")
im1.save(out,"JPEG")
out.close()
这很简单。所以我之前的做法是,当点击一个链接时,示例链接如下;
echo '<div style="text-align: center ;margin-left: auto ; margin-right: auto ;"><a class="button" href="fotograf.php?open='.$going_to_open_dir.'&rotate=temp/'."m_".$fake_going_to_open_dir."_".$fake_entry.'&num=foto'.$a1.'" onclick="this.blur();"><span>90° turn</span></a></div>';
到目前为止都还不错。哦,我还想加上调用我这个小Python应用的PHP代码;
if(isset($_GET["rotate"]))
{
exec("python rotate_image.py ".$_GET["rotate"]);
header("location: fotograf.php?open=".$_GET['open']."&num=".$_GET['num']."#".$_GET['num']);
}
我的问题是:虽然我的系统可以正常工作,但速度太慢了。特别是每次有大约600张图片需要加载的时候,每转动一张图片就显得特别慢。我想知道有没有办法用jQuery(Ajax)来加速这个过程?基本上,我想做的是:在网页上旋转600张图片中的一张,并把旋转后的版本保存到服务器,而不需要重新加载整个页面。
3 个回答
0
具体来说,哪个部分太慢了呢?其实有很多方法可以加快这个速度:
- 把旋转过的图片缓存起来。这是最明显的办法。
- 在页面加载的时候就把旋转过的图片加载进来,并设置为不可见。这样浏览器就会把它们缓存起来。
- 用AJAX请求这些图片。
1
如果你愿意在浏览器里直接操作的话,这篇文章里的技巧可以让你旋转任何HTML内容,包括图片标签。
-webkit-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
0
你似乎每次从PHP脚本请求时都在创建旋转后的版本。检查一下这个文件是否已经存在,如果存在就不要再旋转了。
换句话说,在你的PHP脚本中,先检查一下之前是否已经生成过旋转后的文件。如果已经生成过,就不要再运行Python脚本了,直接跳转到那个旋转后的文件就可以了。
现在你所做的事情是这样的 - 在任何操作之前:
somefile.jpg
request.php?rotate=somefile.jpg:
rotate? yes -> exec python script
在脚本完成后(文件名具体是什么并不重要):
somefile.jpg
somefile_rotated.jpg
所以,这时候在请求somefile.jpg时,你其实不需要再执行Python脚本,但你还是在执行:
request.php?rotate=somefile.jpg:
rotate? yes -> exec python script // even though you already have the output file
你可以这样做:
request.php?rotate=somefile.jpg:
rotate? yes
did we rotate the file already? (=is there a rotated version on our server?)
-> yes, redirect to it
-> no, exec python script, then redirect to the rotated file