Вращение слоя вокруг центра и сохранение файла (72 раза)

Мне нужно повернуть рисунок, который я сделал в Adobe Illustrator.

введите описание изображения здесь

Сложность в том, что нужно вращать только слой со стрелкой (вокруг центра изображения). Это исключает возможность простого добавления файла в какую-либо программу и его вывода через каждые 5 градусов, иначе значок автобуса в центре тоже будет вращаться. Ему нужно специально поворачивать слой со стрелкой вокруг центра каждые 5 градусов, так что, по-видимому, это ограничивает меня внутренними сценариями Illustrator/Photoshop?

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

Разве вы не можете просто сделать круг и стрелку двумя отдельными объектами, а затем объединить их в приложении, на веб-странице или где-то еще и добавить вращение только к стрелке?
@Chris Я думал об этом, но, к сожалению, это приложение Google Maps, часто с более чем 100 маркерами, удвоение и выполнение того, что вы предлагаете, создаст 200 маркеров, что создает проблемы с производительностью.

Ответы (2)

Это очень быстрый скрипт, который должен делать то, что вам нужно:

#target illustrator

var doc = app.activeDocument;
var docName = doc.name.replace(/\.[^\.]+$/, ''),
    docDir = ( doc.path != '' ) ? doc.path : '~';

var angle = 5,
    iterations = 71,
    layerToRotate = 'rotateMe',
    destFolder = 'files';

rotateAndExport();

/**
 * This is where the magic happens...
 */
function rotateAndExport() {

    // loop through layers
    for ( var i = 0; i < doc.layers.length; i++ ) {

        // loop through layer's pageItems
        var layer = doc.layers[i];
        if ( layer.name == layerToRotate ) {
            for ( var j = 0; j < layer.pageItems.length; j++ ) {
                var item = layer.pageItems[j];

                // rotate and export
                for ( var r = 0; r < iterations; r++ ) {
                    item.rotate( angle );
                    exportFileAs( 'PNG', r );
                    exportFileAs( 'SVG', r );
                }
            }
        }
    }
}

/**
 * Export as PNG or SVG
 */
function exportFileAs( fileType, iteration ) {

    // create folder if it doesn't exist
    var destPath = docDir + '/' + destFolder;
    if ( false == Folder( destPath ).exists ) {
        new Folder( destPath ).create();
    }

    // export options
    var destFile;
    var type;
    var exportOptions;

    if ( 'PNG' == fileType ) {

        // create folder if it doesn't exist
        var pngPath = destPath + '/PNG/';
        if ( false == Folder( pngPath ).exists ) {
            new Folder( pngPath ).create();
        }
        destFile = new File( pngPath + '/' + docName + '_' + iteration.toString() );

        type = ExportType.PNG24;
        exportOptions = new ExportOptionsPNG24();
        exportOptions.artBoardClipping = true;
        exportOptions.transparency     = true;

    } else if ( 'SVG' == fileType ) {

        // create folder if it doesn't exist
        var svgPath = destPath + '/SVG/';
        if ( false == Folder( svgPath ).exists ) {
            new Folder( svgPath ).create();
        }
        destFile = new File( svgPath + '/' + docName + '_' + iteration.toString() );

        type = ExportType.SVG;
        exportOptions = new ExportOptionsSVG();
        exportOptions.preserveEditability   = false;
        exportOptions.embedRasterImages     = true;
        exportOptions.embedAllFonts         = false;
        exportOptions.encoding              = SVGDocumentEncoding.UTF8;
        exportOptions.fontType              = SVGFontType.OUTLINEFONT;
    }

    // export
    doc.exportFile( destFile, type, exportOptions );
}

Измените angleи iterationsна то, что вам нужно.

Измените layerToRotateимя слоя, который нужно повернуть.

Измените destFolderимя папки для сохранения файлов, которое будет создано в том же месте, где сохранен ваш файл (или в вашем домашнем каталоге).

Скрипт экспортирует в PNG и SVG в свои папки. Вы можете добавить больше типов файлов, изменив typeи exportOptionsна exportFile()что-то другое.

Вращение будет происходить в центре всех объектов на слое, поэтому вы должны нарисовать невидимый прямоугольник с центром на монтажной области (или там, откуда вы хотите повернуть) над стрелкой и сгруппировать все, как я сделал здесь:

введите описание изображения здесь

Запустите скрипт, и вы должны получить что-то вроде этого:

введите описание изображения здесь

Обратите внимание, все это делается в CS6; Я не знаю, изменилось ли что-то, и не могу проверить новые версии.

@jskidd3 заметил, что вы отметили svg, и pngпоэтому обновил, чтобы экспортировать оба
Хм. Я последовал вашему совету относительно добавления невидимого прямоугольника, но мои стрелки все еще вращаются вокруг центра самой стрелки. Есть идеи? i.imgur.com/AHMzvjE.png
Вам нужно сгруппировать невидимый прямоугольник и стрелку.
Так? Когда я запускаю скрипт сейчас, он ничего не делает. Извините, я новичок в Illustrator (но странно свободно говорю в JS) i.imgur.com/JTgoblr.png
Похоже, это подуровень, а не группа? (это будет сказано в левом верхнем углу, где в настоящее время указано «нет выбора»). Я почти уверен, что сам слой не будет вращаться, так что это имеет смысл; вам нужна настоящая группа, так что ваша стрелка и ваш прямоугольник на слое, выберите оба и нажмите ctrl+g (должно быть так: i.stack.imgur.com/0tynY.png )
Ах ты святой. Большое спасибо. Вы не поверите, как долго я пытался это сделать!
Не за что, рад помочь
  1. Создайте объект ограничительной рамки, который устанавливает правильное начало координат, необходимое для поворота (в центре объекта ограничительной рамки), а также соответствует объекту, который вы хотите повернуть. Раскрасьте объект ограничительной рамки чем-то уникальным, чтобы его можно было легко выбрать позже.
  2. Выберите и сгруппируйте ограничительную рамку и объекты, которые вы хотите повернуть (но не объекты, которые вы хотите оставить неподвижными).
  3. Выберите ObjectTransformTransform Eachи вращайте и перемещайте по мере необходимости. В этом примере я использовал 5º и 20px. Нажмите Copy, чтобы перевести новую копию.
  4. Нажмите ⌘D71 раз, чтобы создать преобразованные дубликаты.

Преобразование Adobe Illustrator

  1. Нажмите A, чтобы выбрать инструмент прямого выбора.
  2. Нажмите на один из объектов ограничивающей рамки.
  3. Выберите SelectSameFill Color, чтобы выбрать все объекты ограничивающей рамки.
  4. Нажмите удалить.
  5. Выберите другие объекты, которые вы хотите продублировать (но не повернуть).
  6. Выберите ObjectTransformTransform Eachи переместите по мере необходимости. Нажмите Copy, чтобы перевести новую копию.
  7. Нажмите ⌘D71 раз, чтобы создать преобразованные дубликаты.

Преобразование Adobe Illustrator

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