• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Relink to new image file by pixel-by-pixel comparison

Explorer ,
Sep 05, 2018 Sep 05, 2018

Copy link to clipboard

Copied

Hi

We have 110 indd docs all over the place on servers-workstations with placed 3150 png/tif qr codes. So around 30 links per file.

Want to relink placed images to new share folder with only pngs, but now new images have different names but same content. File size is not option.

Is it possible via indesign scripting to relink but that indesign search for most similar image in new folder and relink old image automatically? pixel-by-pixel comparison or similar.

tnx

TOPICS
Scripting

Views

1.2K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Sep 05, 2018 Sep 05, 2018

Copy link to clipboard

Copied

Hi kajzica ,

the comparison part pixel-by-pixel could be done by PhotoShop.
With InDesign I see no way. Accessing PhotoShop from InDesign can be done by BridgeTalk.

Here an example with a snippet that opens an image placed with InDesign in PhotoShop:

( function()

{  

    if( app.documents.length == 0 ){ return };

    if( app.documents[0].allGraphics.length == 0 ){ return };

  

    // Have one placed and linked image in the active document:

    var image = app.documents[0].allGraphics[0];

  

    // Get the file path of the image:

    var imagePath = image.itemLink.filePath;

  

    // Test if the image is available:

    if( !File( imagePath ).exists ){ alert( "Error! Image does not exist!"); return };

  

    // We need the BridgeTalk object to talk to PhotoShop:

    var bt = new BridgeTalk;  

    bt.target = "photoshop";

  

    // A more compact way to write the script code for PhotoShop with triple fencing.

    // PhotoShop will open the image:

  

    var psdScript =

  

    '''

    app.displayDialogs = DialogModes.NO;

    var myPsDoc = app.open(File("''' + imagePath + '''"));

  

    // insert code for comparing this image with another one already open or with an image you open after this.

  

    app.displayDialogs = DialogModes.ALL;

  

    ''';

  

    bt.body = psdScript;

    //Idea: Kasyan Servetsky

    bt.onError = function(errObj)

    {

        alert( "Error: " + errObj.body );

    };

    //Idea: Kasyan Servetsky

    bt.onResult = function(resObj) {};

  

    bt.send( 30 );

  

}() )

How could a comparison of pixels be done with PhotoShop?

1. Load both images as layer to one PhotoShop file.

2. Do layer effect Difference on the top layer.

3. Merge the two layers to the background layer.

4. Exploit the Histogram feature.

You should see only one value that is not zero as first entry in the histogram array.

In effect the background layer is totally black with RGB 0,0,0. With a CMYK image the perfect result would be black with 100 C, 100 M, 100 Y, 100 K.

If not there is a difference in the two original images.

For details regarding PhotoShop scripting see:

Adobe Photoshop Scripting

Photoshop Scripting

EDIT:

And of course Davide Barranca's "Professional PhotoShop Scripting"

https://www.ps-scripting.com/

Regards,
Uwe

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Sep 05, 2018 Sep 05, 2018

Copy link to clipboard

Copied

Here a PhotoShop script sample that works with histogram of individual channels in a CMYK image.

Discussion is in German.

Photoshop CC - Kanäle auf Verwendung prüfen

https://www.hilfdirselbst.ch/gforum/gforum.cgi?post=565690#565690

Regards,
Uwe

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Sep 06, 2018 Sep 06, 2018

Copy link to clipboard

Copied

will try to find solution and report back, as always do.

in midtime, any script which can relink to new link from excel table? column a old name and path, column b new name and path?

  

OLD LINKNEW LINK
C:\a\old.tifd:\b\new.png

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Sep 06, 2018 Sep 06, 2018

Copy link to clipboard

Copied

Hi kajzica ,

see into Kasyan Servetsky's script repository here:

Scripts sorted by categories for InDesign

Scroll to category Link.

Regards,
Uwe

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Sep 06, 2018 Sep 06, 2018

Copy link to clipboard

Copied

Kasyan page is golden box for any dtp user. But no script for change from to.

I have "old" links with name 01.tif, 02.tif...............11.tif.....99.tif

need to relink it to different folder/name and with new name like 22256_bbbb_3_444_1.png, 22256_bbbb_3_444_2.png

22256_bbbb_3_444_ is prefix which have new image name. last number is always same.

As you can see, script need to ignore first 0, add virtual prefix and relink it to this real new name in new folder. i can remove 0 from 1-9.

1.tif is now linked to prefix_1.png

10.tif is now linked to prefix_10.png

26.tif is now linked to prefix_26,png

Or script which can rename selected links to new name and i can than use relink file extension and relink to folder functions.

Here is one of kasyan script but need modification. in first box i want to write prefix and that script work on only selected links in links pallete.

#target indesign

if (app.documents.length == 0) {

   err("No documents are open. Please open a document and try again.");

}

if (app.activeDocument.links.length == 0) {

   err("The current document contains no images. Please open a document containing images and try again.");

}

var myFind, myChange, myResult;

var myFolder = Folder.selectDialog ("Choose a new job folder");

if (myFolder != null) {

   var myDoc = app.activeDocument;

   var myLinks = myDoc.links;

   var myDialog = app.dialogs.add({name:"Change job number", canCancel:true});

   var myColumn = myDialog.dialogColumns.add();

   var myPanel = myColumn.borderPanels.add();

   var myLabel1 = myPanel.staticTexts.add({staticLabel:"Change "});

   var myText1 = myPanel.textEditboxes.add();

   if (app.extractLabel("kas_myText1") != "") {

      myText1.editContents = app.extractLabel("kas_myText1");

   }

   var myLabel2 = myPanel.staticTexts.add({staticLabel:" to "});

   var myText2 = myPanel.textEditboxes.add();

   if (app.extractLabel("kas_myText2") != "") {

      myText2.editContents = app.extractLabel("kas_myText2");

   }

   if(myDialog.show() == true){

      var myFind = myText1.editContents;

      var myChange = myText2.editContents;

      app.insertLabel("kas_myText1", myFind);

      app.insertLabel("kas_myText2", myChange);

      for (i = myLinks.length-1; i >= 0 ; i--) {

         var myLink = myLinks;

         var myFile = new File(myLink.filePath);

         var myNewName = myLink.name.replace(myFind, myChange);

         var myNewFile = new File(myFolder + "/" + myNewName);

         if (myFile!= myNewFile) {

            if (myFile.exists) {

               myFile.copy(myNewFile);

               myLink.relink(myNewFile);

               myLink.update();

            }

         }

      }

      myDialog.destroy();

      alert("Done!");

   }

   else{

      myDialog.destroy();

   }

}

function err(e) {

   alert(e);

   exit();

}

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Sep 06, 2018 Sep 06, 2018

Copy link to clipboard

Copied

this can rename to new name path. script only ask for folder with indd. wont show anything but after you open indd new renamed relinked links appears in links palete. you can customize myFolder toSearch toRelink

#target InDesign 

 

app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT 

app.activate(); 

 

var myFolder = '///server/_folder/_folder/'; 

var toSearch = ['old1.tif', 'old2.tif']; 

var toRelink = ['new1.png', 'new2.png']; 

 

var inddFiles = Folder.selectDialog ('Please choose folder with *.indd-files').getFiles('*.indd'); 

var l = inddFiles.length; 

 

if (l === 0){displayDialog('The selcted folder doesn\'t contain ID-Files'); exit()}; 

 

while(l--){ 

    try{ 

app.open(inddFiles); 

var theDoc = app.activeDocument; 

 

var allLinkNames =theDoc.links.everyItem().name; 

 

for(var i = 0; i < toSearch.length; i++) 

var myName = toSearch

for(var s = 0; s < allLinkNames.length; s++) 

var linkName = allLinkNames

if    (linkName === myName){ 

var newFile = File(myFolder + toRelink); 

 

with(theDoc.links){ 

    relink(newFile); 

parent.fit(FitOptions.fillProportionally); 

parent.fit(FitOptions.centerContent); 

 

        } 

    } 

        } 

     

        theDoc.save(); 

theDoc.close(); 

 

}catch (e){ 

    app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL; 

    displayDialog(e); 

    app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT; 

    } 

 

 

app.scriptPreferences.userInteractionLevel = UserInteractionLevels.INTERACT_WITH_ALL; 

 

 

function displayDialog(aString){   

var infoWindow = new Window("palette");    

infoWindow.add("statictext", undefined, aString);    

infoWindow.show();    

$.sleep(2000);    

infoWindow.close();    

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Nov 18, 2018 Nov 18, 2018

Copy link to clipboard

Copied

LATEST

will try to find solution and report back, as always do.

in midtime, any script which can relink to new link from excel table? column a old name and path, column b new name and path?

I don't know how to make a script read an excel file but if you create that table as a Indesign document that little script should work.

#target indesign

if (parseFloat(app.version) < 6) {main();} else {app.doScript(main, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.entireScript, "Relink");}

function main()

{

//name of the .indd document that contains the table

var tableDoc = "table.indd";

exchangetable = app.documents.itemByName(tableDoc).stories[0].tables[0];

var doc = app.activeDocument;

var links = doc.links;

for (var e = 1; e < exchangetable.rows.length; e++)

    {

        var oldlink = exchangetable.rows.cells[0].texts[0].contents.toLowerCase();

        var newlink = exchangetable.rows.cells[1].texts[0].contents.toLowerCase();

       

            for (var i = 0; i < links.length; i++)

                {

                    if (links.filePath.toString().toLowerCase() == oldlink)

                        {

                            var newlinktarget = new File (newlink);

                            links.relink(newlinktarget);

                        }

                }

    }

}

table.png

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Sep 07, 2018 Sep 07, 2018

Copy link to clipboard

Copied

Can you provide a download link to dropbox or similar (not uploaded to the forum, just in case that changes things), with the same QR code in both formats (say 3 pairs of images to check for consistency in data, zip compressed into one file)? There may be are other ways to check for similarity than just pixel content.

On your later post with filename prefix, is the prefix always the same per folder or batch?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Sep 08, 2018 Sep 08, 2018

Copy link to clipboard

Copied

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Sep 08, 2018 Sep 08, 2018

Copy link to clipboard

Copied

Thanks, I was hoping for a metadata solution, but nothing leaped out at me in your sample files…

_____________

I’m guessing that you can’t simply batch rename all of your PNG files from:

13452_TIPTOES_1_1.png

To:

1.png

So then you can just relink to the original filename of 1.tif using the built in InDesign feature to relink to the same filename with a different extension.

_____________

This script does work for your situation, however it is not automated and requires the user to have interaction at key points in each doc and to know a little basic regex/grep:

find-change-links_indd009.png

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines