Загрузка картинок как Вконтакте

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags

Nothing to show

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

  • Local
  • Codespaces

HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.

Sign In Required

< mx:TileList
alternatingItemColors =»[#FFFFFF,#CCCCCC,#AAAAAA]»
verticalScrollPolicy =»on»
columnWidth =»120″ columnCount =»4″ rowHeight =»110″ rowCount =»3″ />

* This source code was highlighted with Source Code Highlighter .

Массово загрузить картинки в ВКонтакте

Скроем ProgressBar и будем показывать его только когда нажимаем на кнопку «начать загрузку (visible =»false»). Сделаем enabled=«false» у кнопок «начать загрузку» и «очистить» (они будут активны только когда список фотографий непуст). Добавим id-шники ко всем важным элементам.

Добавим тег и будем в нем писать код. Подключим flash.net.FileReferenceList и mx.collections.ArrayCollection и заведем главную глобальную переменную photos типа ArrayCollection.

import flash.net.FileReferenceList;
import mx.collections.ArrayCollection;

[Bindable]
private var photos:ArrayCollection = new ArrayCollection;

* This source code was highlighted with Source Code Highlighter .

[Bindable] означает, что переменная photos может быть связана с другими элементами. Укажем ее в качестве dataProvider-а к TileList, и тогда все изменения в массиве photos будут автоматически отражаться в TileList.

Еще по теме:  Сериал это моя жизнь Вконтакте

Добавим глобальную переменную frList типа FileReferenceList. На клик по кнопке «Выбрать фотографии» добавим функцию selectPhotos. Для того, чтобы отлавливать событие, когда в frList.browse() в файловом диалоге завершается выбор фоток, у frList нужно указать addEventListener(Event.COMPLETE,addPhotos). Необязательным параметром функции frList.browse() служит массив объектов типа FileFilter, там можно задать маску для названий файлов.

Наконец напишем функцию addPhotos, которая будет перебирать все файлы, выбранные в frList.fileList и добавлять их в массив photos. Вот что получится.

import mx.events.CollectionEvent;
import flash.net.FileReferenceList;
import mx.collections.ArrayCollection;

[Bindable]
private var photos:ArrayCollection = new ArrayCollection;
private var frList:FileReferenceList = new FileReferenceList;

* This source code was highlighted with Source Code Highlighter .

Как загрузить картинку в ВК?

Добавим простые функции удаления всех фоток и удаления выбранной фотки, используя методы removeAll, removeItemAt и getItemIndex у класса ArrayCollection. При этом функция, которая вызывается из itemRender-а, должна быть публичной.

* This source code was highlighted with Source Code Highlighter .

На этом все, здесь полный код: Uploader.mxml, photoThumb.mxml. Дальше в ролик нужно передавать какую-нибудь авторизацию, я передаю идентификатор сессии через flashvars, соответственно во flex переданные переменные находятся в массиве Application.application.parameters. Затем в инициализации делаю HTTPRequest, отправляю сессию и получаю имя юзера, его альбомы и все остальное. Также нужно отлавливать ошибки и исключения, разбирать ответ сервера итд. Здесь написан только необходимый минимум.

Если нет необходимости загружать исходники фотографий, можно делать ресайз до отправки на сервер. Делается с помощью flash.display.Bitmap, вот пример.

В процессе подготовки поста обнаружил странный баг. Прогресс-бар и событие FileReference.cancel() некорректно работают на WinVista + FF 3.5.7 + Flash Player 10.0.42, но на аналогичном WinXP + FF 3.5.7 + Flash Player 10.0.42 все хорошо.

Также пока не решил проблему с поворотом изображений. Во-первых не нашел, как делать анимированное преобразование через задание новой image.transform.matrix. Вторая проблема — мой Rotate применяется не к данным, которые передаются в itemRenderer, а к тегу самого itemRenderera. Если повернуть картинку, а потом ее удалить и загрузить на ее место новую, она окажется повернутой.

Еще по теме:  Девушки которые дают Вконтакте

При этом событие initialize каждой ячейки происходит только один раз. Приходится в itemRenderer на dataChange вешать поворот в 0, хотя хватило бы, если бы TileList умел полностью уничтожать ячейки при удалении данных, и потом проводить повторную инициализацию.

Источник: habr.com

ActionScript 3.0: как загрузить изображение из Интернета и сохранить Вконтакте

Решил разместить в открытый доступ всё, что касается загрузки изображения из Интернета во Flash-приложение и сохранения этого изображения Вконтакте. Надеюсь, подобные статьи позволят увидеть больше хороших приложений для Вконтакте на языке Actionscript 3.0 (Flash/Air). Возможно, кому-то понадобится только загрузка изображения или сохранение изображения Вконтакте, но думаю, что тем, кто сталкивается с этим впервые, будет полезно и то, и другое.

Загрузка изображения из Интернета в Flash

Обходим защиту от загрузки сторонних картинок

Важно! Флэш НЕ будет загружать картинку с сервера без получения разрешения от него. Также нужно разрешить домен в самом флэше.

//Разрешить все домены

//Загрузить файл с разрешением от сервера (укажите путь к файлу crossdomain.xml на нужном сервере).

Чтобы загружать файлы с Вашего сайта, добавьте в корень crossdomain.xml следующего содержания (можно скопировать с HelpExamples).

Загружать картинки без получения разрешений от crossdomain.xml сервера можно только с Air-приложений, но не с Flash. Чтобы загружать картинки с любого сайта, проще всего загружать их через php-скрипт своего сайта.

if(!isset($_GET[‘path’])) echo ‘Error’;
exit;
>
$path = $_GET[‘path’];

$fileContent = file_get_contents($path);
if(substr($fileContent,0,6) == ‘GIF89a’ || substr($fileContent,0,6) == ‘GIF87a’) $contentType = ‘image/gif’;
> else if(substr($fileContent,1,3) == ‘PNG’) $contentType = ‘image/png’;
> else $hexContents = bin2hex($fileContent);
if(strtolower(substr($hexContents,0,4)) == ‘ffd8’) $contentType = ‘image/jpeg’;
> else echo «Error»;
exit;
>
>

header(«Content-Description: Proxied Image File»);
header(«Content-Type: $contentType»);
header(«Content-Disposition: attachment; filename color: #999999;»>ВАШСАЙТ /proxy.php?path= АДРЕС_КАРТИНКИ .

Еще по теме:  Как сделать чтобы не видели лайки в ВК

Загрузка и обработка изображения

//url — адрес загружаемой фотографии.

var url:String = «http://www.helpexamples.com/flash/images/logo.png»;

var fl_Loader = new Loader();

var byteArray:ByteArray = new ByteArray();

//вызываемая функция загрузки фотографии

fl_Loader = new Loader();
fl_Loader.load(new URLRequest(url));
fl_Loader.contentLoaderInfo.addEventListener(Event.COMPLETE, drawImage);
>

Теперь обрабатываем картинку после ее загрузки.

function drawImage(event:Event)
var myBitmap:BitmapData = new BitmapData(fl_Loader.width, fl_Loader.height, false);

myBitmap.draw(fl_Loader, new Matrix());
var jpgEncoder:JPGEncoder = new JPGEncoder(100);
byteArray = jpgEncoder.encode(bdata);

Для преобразования картинки в ByteArray используется JPGEncoder. В современных версиях Adobe Flash не нужно загружать класс из сети, достаточно подключить нативную библиотеку import com.adobe.images.JPGEncoder;

Если Ваша версия Flash Professional / Flash Develop не находит такую библиотеку, подключаем ru.inspirit.image.encoder.JPGEncoder;

Сохранение изображения на стену Вконтакте

Для того, чтобы быстро делать запросы Вконтакте, к приложению должна быть подключена библиотека VK.Api, взять её можно здесь (import vk.*;). Чтобы появился доступ к API, нужно авторизоваться и получить ключ доступа (access_token) — для приложений, загруженных в сам Вконтакте это очень просто:

ВАЖНО! Существует два конфликтующих класса JSON-парсинга: один встроен Вконтакте, другой появился в новых версиях Flash. В новых версиях, ругающихся на DataProvider.as, подключаем import com.adobe.serialization.json.JSON; затем заходим в файл vk/api/DataProvider.as, удаляем import com.adobe.serialization.json.JSON; и заменяем JSON.decode на JSON.parse .

Этап 3. Сохранение изображения на стену Вконтакте

Картинка загружена Вконтакте. Теперь сохраняем её на стену пользователю.

function onUploadCompleteThroughAlarm(e:Event)
var answer:String = mll.loader.data;
var data:Object = JSON.parse(answer);

//Произвольная функция, запускающаяся после успешного размещения изображения на стене пользователя.

Надеюсь, что смог описать все подводные камни и сэкономил немало нервов начинающим разработчикам флэш-приложений. О том, что упущено или можно сделать лучше, пишите в комментариях. В следующий раз постараюсь рассказать о реализации аналогичной функциональности для Air-приложений и что-нибудь новое. Поддержать это направление статей можно донатом или размещением рекламы в моих приложениях.

Источник: nocens.net

Рейтинг
( Пока оценок нет )
Загрузка ...