10 berichten aan het bekijken - 1 tot 10 (van in totaal 10)
  • Q:
    Bijdrager
    2manydjs

    Automatisch lage resolutie kopieën

    Halllo,

    Wij hebben voor onze DTP afdeling een Mac Mini als server die voornamelijk als file server wordt gebruikt. Belangrijk hierop is de opslag van onze hoge resolutie bestanden (TIFF in CMYK). Nu willen we deze bestanden beschikbaar maken in lage resolutie (JPG in RGB) voor iedereen buiten de DTP afdeling. Het omzetten naar lage resolutie kan gemakkelijk worden gedaan met ‘sips’ op de Mac Mini, echter voor het automatiseren heb ik geen oplossing.

    Ik wil graag dat de hoge resolutie share elke avond wordt nagekeken voor nieuwe bestanden, en die dan in dezelfde map structuur naar een tweede share worden gekopieerd. Bijvoorbeeld rsync of unison kunnen gemakkelijk herkennen welke bestanden nieuw zijn, en die bestanden naar de tweede share kopiëren. Echter als ik de bestanden daarna ga omzetten, zal rsync de volgende dag alle bestanden opnieuw willen kopiëren omdat mijn hoge resolutie beelden dan missen op de tweede share (die zijn nu in lage resolutie!). Ik heb ook gedacht aan een automator script die zoekt naar bestanden die zijn aangepast op “vandaag”, maar dan kan ik moeilijk de map structuur automatiseren.

    Heeft iemand een idee hoe ik dit het beste kan automatiseren?

    Alvast bedankt!

    Bijdrager
    Jakko Westerbeke

    Maak een mapactie die een Automator-takenreeks gebruikt om het bestand te verkleinen. Dit hoef je niet elke avond te laten draaien, want mapacties worden uitgevoerd zodra er iets in de map verandert.

    Bijdrager
    TheBigZ

    Net als Jakko zou ik ook een Folder Action gebruiken.
    http://www.maclife.com/article/howtos/how_use_folder_actions_automator

    Bijdrager
    computer space

    En automater is ook goed in omzetten van pdfs, bijvoorbeeld hele inhoud pixelen, incl tekst op lage resolutie in andere kleurruimte.

    Bijdrager
    2manydjs

    Bedankt voor jullie reacties.

    Een mapactie is alleen mogelijk wanneer de gebruiker is ingelogd. Een oplossing waar geen gebruiker voor nodig is lijkt ons stabieler en veiliger. Het alternatief is automator actie die naar nieuwe bestanden zoekt, daar is geen gebruiker voor nodig.

    Het grootste probleem waar ik echter tegen aan loop met automator is om de map structuur juist aan te houden; daar zie ik momenteel geen oplossing in.

    Heeft iemand hier ervaring mee?

    Bijdrager
    Jakko Westerbeke

    De gebruiker is toch ingelogd op het moment dat die bestanden in de betreffende map plaatst? Dan moet je wel voor elke gebruiker de mapactie installeren, en zorgen dat iedereen de nieuwste versie heeft als je eraan knutselt.

    Een andere manier om dit te bereiken is ingewikkelder, maar je zou ImageMagick kunnen installeren en dan een shellscript gebruiken dat de bestanden kopieert en door ImageMagick om laat zetten naar het gewenste formaat. Het script laat je dan door launchd op gezette tijden (bijvoorbeeld elke avond) uitvoeren.

    Bijdrager
    2manydjs

    Hi Jakko,

    Veel gebruikers zijn Windows gebruikers, het is daarom nodig dat de behandeling op de server draait. ImageMagick kan inderdaad als alternatief voor sips gebruikt worden, maar daar ligt mijn probleem niet. Het gebruik van een script en launchd is mij niet vreemd. Ik heb echter geen oplossing over het ontwerp van het script:

    1. Het moet automatisch de map structuur aanmaken
    2. Het moet de bestanden die nieuw zijn kopiëren
    3. Het moet de nieuwe bestanden omzetten naar lage resolutie

    Stap 1 en 2 kunnen met rsync worden gedaan, stap 3 kan met sips worden gedaan. Echter als ik stap 3 uitvoer zal rsync alle bestanden opnieuw willen kopiëren. Waar ik niet uitkom is een workflow waar stap 1, 2 en 3 worden uitgevoerd zonder dat elke dag alle bestanden opnieuw worden omgezet.

    Ik ben nu aan het testen met een workflow waar alle bestanden wel elke dag worden omgezet, en hopelijk doet de Mac Mini daar niet te lang over ’s avonds. Mocht iemand toch een slimmere workflow kunnen verzinnen, dan hoor ik het graag!

    Bijdrager
    2manydjs

    Ik heb uiteindelijk de volgende oplossing:
    1. Rsync om de map structuur aan te maken
    2. Een shell script om te kijken welke bestanden nog niet bestaan
    3. Een sips opdracht om de juiste bestanden om te zetten

    Dit alles in een automator bundle om de bestanden makkelijk op te pakken (Get Specified Finder Items en Get Folder Contents met Repeat for each subfolder found).

    rsync opdracht:

     
    rsync -aE --delete --include='*/' --exclude='*' /Locatie/van/Hoge\ Resolutie/ /Locatie/van/Lage\ Resolutie
     

    shell script:

     
    for f in "[email protected]"
    do
    if [ -f "$f" ]
    	then
    		destinationDir="$(dirname "$f" | sed -e 's_Hoge Resolutie_Lage Resolutie_g' -e 's_$_/_g')"
    		destinationFile="$(basename "$f" | sed -e 's_$_.jpg_g')"
    		if ! [ -f "$destinationDir$destinationFile" ]
    			then
    			sips -s dpiHeight 72.0 -s dpiWidth 72.0 -s format jpeg -s formatOptions medium -Z 1024 -m '/System/Library/ColorSync/Profiles/Generic RGB Profile.icc' "$f" --out "$destinationDir$destinationFile" || true
    		fi
    fi
    done
     
    Bijdrager
    Jakko Westerbeke
    2manydjs op 09 juni 2015

    Waar ik niet uitkom is een workflow waar stap 1, 2 en 3 worden uitgevoerd zonder dat elke dag alle bestanden opnieuw worden omgezet.

    Vraag de directory-inhoud op, loop die door, en kijk bij elk bestand of er een bijbehorend bestand in lage resolutie is. Zo ja, verder met het volgende bestand; zo nee, dan laat je het script een kopie in lage resolutie maken.

    Ik denk dat ik dit eerder in een wat handzamere taal dan als puur shellscript zou maken — iets als Python of zo, waarmee je makkelijker kunt controleren of bestanden al bestaan, delen van het pad kunt vervangen, enz.

    Bijdrager
    2manydjs

    Hi Jakko,

    Dat is precies wat deze stap in mijn script doet:

     
    if ! [ -f "$destinationDir$destinationFile" ]
     
10 berichten aan het bekijken - 1 tot 10 (van in totaal 10)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.