2016-08-25 4 views
1

Посмотрите, возможно ли это для некоторых работ, которые мы могли бы разместить в нашем офисе. У меня есть несколько сложных рисунков на основе некоторых из наших очень старых инженерных чертежей. Это в основном файлы с двумя слоями, данные о белых линиях и слой черного фона.Photoshop - сценарий для цветного изображения на основе информации RGB в текущем местоположении

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

Мне интересно, если сценарий может быть сделан, который делает следующее ...

  1. движется мышь к случайному X, Y% расположение на изображении
  2. проверяет, является ли цвет 0,0 , 0 (черный)
  3. если да, то ведро краски заполнения заданного цвета и возврата к шагу 1
  4. , если НЕТ, вернуться к шагу 1

Повторить 100 раз

Итак, сценарий перемещается по изображению, а ковш заполняет цвет, если цвет в текущем местоположении курсора черный. Надеемся, это заполнит все технические детали этих изображений наугад, без случайного заполнения деталей переднего плана, которые являются БЕЛОЕ/СЕРЫЙ, а не черным.

Можно ли это сделать теоретически?

Благодаря

+0

фотошопа требования здесь? Это, казалось бы, возможно с (например) python + PIL http://stackoverflow.com/questions/10026346/how-to-flood-fill-part-of-a-bitmap-enclosed-by-a-black- border-with-my-selected-col –

+0

Может ли PIL работать с файлами tiff и создавать слои? если так, тогда это будет хорошо. Я просто предположил, что фотошоп будет способом идти, но все, что выполняет эту работу, отлично со мной. –

ответ

0

Эти методы из старых сценариев Photoshop я сделал ~ 10 лет назад, но они могут быть полезны. Есть две функции, одна из которых выполняет щелчок пипетки на точке x, y, чтобы получить цвет, а другой - волшебную палочку, щелкнув по точке x, y. Для вашего примера вы можете очертить точку, и если она вернется в черный цвет, вы можете использовать волшебную палочку той же точки, чтобы сделать выбор области, а затем выполнить заливку этого выделения.

function eyedropper(doc,x,y) { 
// don't mess with spacing inside function, seesm to braek it 
Stdlib = function() {}; 
Stdlib.selectBounds = function(doc, b, type, feather, antialias) { 
    doc.selection.select([[ b[0], b[1] ], 
          [ b[2], b[1] ], 
          [ b[2], b[3] ], 
          [ b[0], b[3] ]], 
         type, feather, antialias); 
    }; 

    // getColorAt 
    // based on: 
    //  [email protected] wrote: 
    //  news://adobeforums.com:119/[email protected] 
    // 

     // make new 1 pixel selection 
     x = Math.floor(x); 
     y = Math.floor(y); 

     Stdlib.selectBounds(doc, [x, y, x+1, y+1]); 

     try { 
      function findPV(h) { 
       for (var i = 0; i <= 255; i++) { 
        if (h[i]) { return i; } 
       } 
      return 0; 
     } 

     var pColour = new SolidColor(); 

     pColour.rgb.red = findPV(doc.channels["Red"].histogram); 
     pColour.rgb.green = findPV(doc.channels["Green"].histogram); 
     pColour.rgb.blue = findPV(doc.channels["Blue"].histogram); 

     } finally { 
      doc.selection.deselect(); 
     } 
    return pColour; 
}; 

Кроме того, здесь моя функция для выполнения волшебной палочки:

function wand(x,y,tol,option) 
{ 
    // options: 
    // setd = initial selection 
    // AddT = add to selection 

    var id9466 = charIDToTypeID(option); 
     var desc1828 = new ActionDescriptor(); 
     var id9467 = charIDToTypeID("null"); 
      var ref1340 = new ActionReference(); 
      var id9468 = charIDToTypeID("Chnl"); 
      var id9469 = charIDToTypeID("fsel"); 
      ref1340.putProperty(id9468, id9469); 
     desc1828.putReference(id9467, ref1340); 
     var id9470 = charIDToTypeID("T "); 
      var desc1829 = new ActionDescriptor(); 
      var id9471 = charIDToTypeID("Hrzn"); 
      var id9472 = charIDToTypeID("#Pxl"); 
      desc1829.putUnitDouble(id9471, id9472, x); 
      var id9473 = charIDToTypeID("Vrtc"); 
      var id9474 = charIDToTypeID("#Pxl"); 
      desc1829.putUnitDouble(id9473, id9474, y); 
     var id9475 = charIDToTypeID("Pnt "); 
     desc1828.putObject(id9470, id9475, desc1829); 
     var id9476 = charIDToTypeID("Tlrn"); 
     desc1828.putInteger(id9476, tol); 
     var id9477 = charIDToTypeID("AntA"); 
     desc1828.putBoolean(id9477, true); 
    executeAction(id9466, desc1828, DialogModes.NO); 
}; 
+0

спасибо, @patrick, я посмотрю на те сценарии, которые они должны помочь. –

 Смежные вопросы

  • Нет связанных вопросов^_^