Конференция "Прочее" » Посоветуйте программу для визуальных эффектов
 
  • Григорьев Антон © (11.12.08 17:14) [0]
    Нужно в программу вставить анимацию. Анимация очень простая - например, схлопывание картинки в точку. Программная реализация уже готова, теперь надо просто красиво нарисовать спрайты, изображающие различные фазы схлопывания. Если пытаться тупо уменьшать картинку через StretchDraw или в Paint'е, получается не очень красиво, нарушается симметрия деталей. Не знает ли кто программу, которая заточена под такие задачи? Что-то типа того, что на входе - картинка и желаемый способ исчезания, на выходе - серия картинок, показывающих последовательно фазы исчезания? Очень уж не хочется вручную каждую фазу править. У рисунков исходный размер 48х48, если это имеет значение.
  • tesseract © (11.12.08 17:23) [1]
    Sony Vegas, Boris Effects, Adobe Flash action script и другие.  

    И  есть такой спецкомпонент для Delphi как ImageEN :-)
  • Servy © (11.12.08 23:55) [2]
    > Анимация очень простая - например, схлопывание картинки
    > в точку.


    > У рисунков исходный размер 48х48, если это имеет значение.


    Я бы для такой задачи использовал фотошоп и макросы. Произвели нужные превращения для одного рисунка и записали, потом проиграли для остальных.

    А вообще, наверное, графику стоит предоставить дизайнерам, а то была тут недавно цитата про сапожника, пироги, и результаты их совмещения в одном предложении. :)
  • DVM © (12.12.08 00:01) [3]
    Фотошоп + скрипт (не макросы).
    Вот пример скрипта для фотошопа, который делает уменьшение картинки за несколько шагов. Его несложно переделать в то что требуется.
    Файл сохранить с расширением .js

    var docRef = app.activeDocument;
    var strtRulerUnits = app.preferences.rulerUnits;
    app.preferences.rulerUnits = Units.PIXELS;

    var docHeight = docRef.height;
    var docWidth = docRef.width;
    var docResolution = 400.0;

    var MaxWidth = 2362;
    var MaxHeight = 1581;

    var coeffH = parseInt(docWidth) / parseInt(docHeight);
    var coeffW = parseInt(docHeight) / parseInt(docWidth);

    function makeFrame (BackgroundColor, ForegroundColor, Size) {


    var docHeight = docRef.height;
    var docWidth = docRef.width;

    var oldFgColor = app.foregroundColor;
    var oldBgColor = app.backgroundColor;

    var fgColor = new SolidColor();
    var bgColor = new SolidColor();

    fgColor.rgb.hexValue = ForegroundColor;
    bgColor.rgb.hexValue = BackgroundColor;

    var i = 0;

    while (typeof Size[i] != "undefined"){


    app.foregroundColor = (i % 2) ? bgColor : fgColor;
    app.backgroundColor = (i % 2) ? fgColor : bgColor;

    docWidth += Size[i] * 2.0;
    docHeight += Size[i++] * 2.0;
    docRef.resizeCanvas(docWidth, docHeight, AnchorPosition.MIDDLECENTER);

    }


    app.foregroundColor = oldFgColor;
    app.backgroundColor = oldBgColor;

    }

    function SaveAsJPEG (Destination, TailName, Quality, Limit) {
    var FileName = docRef.name;
    var OutputFileName = Destination + FileName;

    var regex = /(.*)\.(.*)/;
    var CorrectedName = regex.exec(OutputFileName);

    OutputFileName = CorrectedName[1];
    FullOutputFileName = OutputFileName + TailName + ".jpg";

    docRef.flatten();

    docRef.changeMode(ChangeMode.RGB);

    docRef.bitsPerChannel = BitsPerChannelType.EIGHT;

    jpegFile = new File(FullOutputFileName);
    jpegSaveOptions = new JPEGSaveOptions();
    jpegSaveOptions.embedColorProfile = false;
    jpegSaveOptions.quality = Quality;

    docRef.saveAs(jpegFile, jpegSaveOptions, true, Extension.LOWERCASE);

    jpegFile = null;

    if (typeof Limit == "undefined"){
    // alert("Undefined Limit");
    }
    else
    {

    jFile = new File(FullOutputFileName);
    CurrentLength = jFile.length;
    jFile = null;
    while (CurrentLength > (Limit + 19000)){

    Quality = Quality - 1;
    jpegSaveOptions.quality = Quality;
    docRef.saveAs(jpegFile, jpegSaveOptions, true, Extension.LOWERCASE);
    jFile = new File(FullOutputFileName);
    CurrentLength = jFile.length;
    jFile = null;

    }


    }
    }

    function ResizeStepByStep (MaxWidth, MaxHeight, Method) {


    if ((docWidth > MaxWidth) || (docHeight > MaxHeight))
    {

    var Ratio = MaxWidth / MaxHeight;

    if (coeffH > Ratio)
    {
    var stepWidth = parseInt(docWidth) * 0.1;
    var tmpWidth = parseInt(docWidth) - stepWidth;

    while (tmpWidth > (MaxWidth + 1))
    {

    docHeight = coeffW * tmpWidth;
    docWidth = tmpWidth;
    docRef.resizeImage(docWidth, docHeight, docResolution, Method);
    tmpWidth = tmpWidth - stepWidth;

    }

    docHeight = coeffW * MaxWidth;
    docWidth = MaxWidth;

    }

    if (coeffH <= Ratio)
    {
    var stepHeight = parseInt(docHeight) * 0.1;
    var tmpHeight = parseInt(docHeight) - stepHeight;

    while (tmpHeight > (MaxHeight + 1))
    {

    docWidth = coeffH * tmpHeight;
    docHeight = tmpHeight;
    docRef.resizeImage(docWidth, docHeight, docResolution, Method);
    tmpHeight = tmpHeight - stepHeight;

    }

    docWidth = coeffH * MaxHeight;
    docHeight = MaxHeight;

    }

    docRef.resizeImage(docWidth, docHeight, docResolution, Method);
    }

    }

    savedState = docRef.activeHistoryState;
    ResizeStepByStep(2362, 1581, ResampleMethod.BICUBICSHARPER);

    //makeFrame ("FFFFFF", "010101", [1, 1, 40]);

    SaveAsJPEG("c:/tmp/", "_PRINT", 12, 5000000);
    docRef.activeHistoryState = savedState;

    docRef.close(SaveOptions.DONOTSAVECHANGES);
    app.preferences.rulerUnits = strtRulerUnits;
    docRef = null;

  • DVM © (12.12.08 00:02) [4]
    Правда в нем много лишнего (я им фотки для печати готовлю), но все довольно просто.
 
Конференция "Прочее" » Посоветуйте программу для визуальных эффектов
Есть новые Нет новых   [134447   +41][b:0][p:0.002]