javascript — Adobe Creative SDK для веб-сайтов с сохранением отредактированного изображения

Я внедряю продукт Adobe Creative SDK на свой сайт для административного использования; администраторы могут получить доступ к определенным изображениям (используется на слайдере главной страницы), редактировать и сохранять.

Проблема в том, что документация Adobe о том, как воспользоваться функцией обратного вызова onSave (), очень расплывчата. Я должен был пойти на старый сайт, Aviary, чтобы найти ответы, но даже там это довольно расплывчато.

Во-первых, я вытаскиваю изображения с сервера с помощью запроса MySql DB (в слайдере есть как минимум 2 изображения, поэтому я хотел, чтобы это было основано на базе данных, а не статично). Изображения хранятся в виде файлов со ссылкой на них в БД.

Во-вторых, как только изображения отображаются на странице (все они отображаются на странице администрирования вместе с наложениями текста, ссылками и т. Д.), Администратор может щелкнуть изображение, вызвать Adobe Creative SDK и открыть окно редактора. , Все хорошо.

В-третьих, после редактирования администратор может нажать «Сохранить», и его изменения временно сохраняются в облаке Adobe (и отредактированное изображение заменяет исходное изображение на странице). Мне нужно, чтобы изображение также сохранялось на моем сервере, перезаписывая исходное изображение (я не хочу обновлять базу данных — слишком много дополнительной работы).

Это где расплывчатые инструкции в Adobe и Aviary не помогают.

Вот мой код …

(Это функции из Adobe Creative SDK):

var featherEditor = new Aviary.Feather({
apiKey: 'myapikey',
theme: 'dark', // Check out our new 'light' and 'dark' themes!
tools: 'all',
appendTo: '',
onSave: function(imageID, newURL) {
var img = document.getElementById(imageID);
img.src = newURL;
},
onError: function(errorObj) {
alert(errorObj.message);
}
});
function launchEditor(id, src) {
featherEditor.launch({
image: id,
url: src
});
return false;
}

По сути, каждое загруженное изображение включает в себя <img> пометить событие onclick, которое выглядит так:

<a href="#" onclick="return launchEditor('editableimage<?php echo $srow->id ?>', 'http://www.3yearlectionary.org/assets/slider/<?php echo $srow->sld_image ?>');"><img id="editableimage<?php echo $srow->id ?>" src="assets/slider/<?php echo $srow->sld_image ?>" /></a>

Это вызывает функцию launchEditor и показывает редактор. При нажатии кнопки «Сохранить», среди прочего, вызывается обратный вызов onSave (), и именно в этой функции обратного вызова я могу сохранить изображение локально.

НО Adobe только предлагает следующие примеры, чтобы сделать это, и они имеют мало смысла для меня:

Во-первых, кажется, что это нужно добавить в функцию onSave ():

$.post('/save', {url: newURL, postdata: 'some reference to the original image'})

Я предполагаю, что ‘/ save’ на самом деле будет php-скрипт, который я использую для выполнения работы … или, может быть, это местоположение на сервере для сохранения изображения … не уверен. «Постданные» говорят, что для этого нужно «иметь некоторую ссылку на исходное изображение», но я не знаю, как это получить. Я попытался использовать «url» из функции launchEditor (), потому что кажется, что оно было передано в featherEditor, но это не сработало, просто я возвратил нулевое значение, когда я сделал alert ().

Если кто-то может помочь мне понять это, я могу легко позаботиться о php на стороне сервера, который делает сохранение. Но я просто не знаю, как получить новое изображение, сохраненное Adobe, чтобы переопределить старое изображение на моем сервере. Спасибо!

3

Решение

Редактор изображений onSave() метод

onSave() это просто крюк; это метод, вызываемый после завершения сохранения изображения. Что вы положили внутрь onSave() Метод полностью зависит от вас.

Для иллюстрации вы можете: 1) заменить исходный элемент элемента изображения новым URL отредактированного изображения, затем 2) закрыть редактор:

onSave: function(imageID, newURL) {
originalImage.src = newURL;
featherEditor.close();
}

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

Снова, onSave() это просто ловушка, которая используется после завершения сохранения, и ее содержимое полностью зависит от вас.

Отправка на ваш сервер

Код, который вы указали в своем вопросе, является лишь примером того, как вы можете опубликовать данные на своем сервере, используя jQuery в редакторе изображений. onSave() метод. Не требуется, чтобы вы делали это таким образом; вам даже не нужно использовать jQuery.

Для ясности рассмотрим этот пример еще раз:

$.post('/save', {url: newURL, postdata: 'some reference to the original image'})

Конечная точка

В приведенном выше примере используется JQuery post() метод ударить /save конечная точка на вашем сервере. Этой конечной точкой может быть все, что вы хотите. Если у вас есть конечная точка на вашем сервере называется /upload-imageВы можете использовать это вместо этого.

В вашем случае на этой конечной точке будет PHP-скрипт, который обрабатывает сохранение файла изображения и обновление базы данных.

Почтовые данные

Второй аргумент post() это объект с данными, которые вы хотите передать. В этом примере мы передаем:

  1. newURL отредактированного изображения, чтобы ваш сервер мог что-то с ним сделать (см. Важная заметка ниже)
  2. ссылка на исходное изображение (с произвольным названием postdata здесь), чтобы ваш сервер мог знать, какое изображение было отредактировано

Вы можете положить все, что вы хотите в этом объекте. Это зависит от того, что нужно вашему скрипту сервера. Но, как минимум, я бы подумал, что newURL и, вероятно, какой-то способ ссылки на исходное изображение в вашей базе данных.

Важная заметка: как отмечено в Creative SDK для веб-руководства по редактору изображений, newURL что вы получаете в onSave() метод является временный URL. Срок действия истекает через 72 часа. Это означает, что ваш серверный скрипт должен сохранить само изображение на вашем сервере. Если вы сохраните только URL в своей базе данных, ваши изображения начнут исчезать через 72 часа.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]