Быстрое вращение изображений с использованием PHP и jQuery - PullRequest
1 голос
/ 19 августа 2010

Я написал скрипт на python, который поворачивает изображение на 90 градусов. Я включаю код Python на тот случай, если вы хотите его увидеть;

#! /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&deg; turn</span></a></div>';

Пока все хорошо. О, и позвольте мне добавить php-код, вызывающий мое милое маленькое приложение на python;

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 ]

1 голос
/ 19 августа 2010

Если вы счастливы сделать это только в браузере, уловки этой статьи позволят вам вращать любой HTML-контент, включая теги изображений.

-webkit-transform: rotate(-90deg); 
-moz-transform: rotate(-90deg); 
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
0 голосов
/ 19 августа 2010

Что конкретно слишком медленно? Есть много способов ускорить это:

  • Кэшировать повернутые изображения. Это очевидный.
  • Загрузка повернутых изображений при загрузке страницы, установите значение невидимым. Это заставит браузер их кешировать
  • AJAX запрос на изображения.
0 голосов
/ 19 августа 2010

Кажется, вы создаете повернутую версию каждый раз, когда она запрашивается из сценария PHP. Проверьте, существует ли он, и вращайте только, если нет.

Другими словами, в вашем PHP-скрипте проверьте, не генерировали ли вы уже повернутый файл ранее. Если да, не запускайте скрипт python снова, просто перенаправьте его в повернутый файл.

Пример того, что у вас есть сейчас - до запуска чего-либо:

somefile.jpg

request.php повернуть = somefile.jpg:

rotate? yes -> exec python script

после завершения скрипта (не важно, какие именно имена файлов):

somefile.jpg
somefile_rotated.jpg

Итак, на данный момент вам не нужно снова запускать скрипт python при запросе somefile.jpg, но вы все равно делаете:

request.php повернуть = somefile.jpg:

rotate? yes -> exec python script // even though you already have the output file

Что вы могли бы сделать:

request.php повернуть = 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...