Как получить данные только после ресайза изображения?

Рейтинг: 1Ответов: 0Опубликовано: 04.09.2014

Подскажите, как получить данные только после ресайза изображения.

Мне нужно создать 2-3 копии картинки, использую imagemagick.
После загрузки на той же странице необходимо вывести уменьшенную копию картинки (thumb).

Пишу так:

async.waterfall([
    function(callback) {
        // Тут загружаю файл и получаю данные файла
        // Отправляю дальше по цепочке
        callback(null, file);
    },
    function(file, callback) {
        // В конфиге присутствуют две директории куда нужно переложить файлы
        // На данном этапе мне нужно просто в имя файла добавить директорию и сохранить его там же

        var obj = config.get('uploader:folders') // Получаю массив с данными размеров для каждой директории
            , fileNameTmp = file.file.path.split('/').pop(); // это имя файла md5.jpg

        async.each(Object.keys(obj), function( folder, callback) {
            // folder = thumb|small
            im.resize({
                width: obj[folder].width,
                height: obj[folder].height + "^",
                srcPath: './' + file.file.path,
                dstPath: config.get('uploader:options:tmpPath') + '/' + folder + ':' + fileNameTmp, // уменьшеная копия с директорией в названии thumb:md5.jpg
                customArgs: [
                    "-gravity", "center",
                    "-extent", obj[folder].width + "x" + obj[folder].height
                ]
            },
            function(err){ 
                if(err) return callback(err);
                // Нужно передать file дальше, если создана копия thumb:md5.jpg (не или созданы все копии)
                callback(null, file);
            });
        }, function(err, file) {
            if(err) return callback(err);
            // Когда копия thumb:md5.jpg создана так же передать file дальше
            callback(null, file);
        });
    }
], function(err, file) {
    if(err) return next( new HttpError(403, err));

    res.statusCode = 200;
    res.end(util.inspect(file));
});

Проблема заключается в том, что любые мои "махинации" приводят к тому, что ссылку на уменьшенную копию я формирую, а вот картинка (thumb) еще не успела создаться, и получается что изображения не существует.
Как быть?

Ответы

Ответов пока нет.