Jump to content

Photoshop-Skript zum Schärfen für Web


Empfohlene Beiträge

Werbung (verschwindet nach Registrierung)

Hallo!

 

Update!

 

Ich habe mal ein kleines Skript geschrieben, welches man für Photoshop CC nutzen kann. (einfach als .jsx abspeichern)

Es wird nun explizit die kürzere Seite (egal ob höhe oder Breite) auf eine beliebige Größe reduziert.

Der Wert darf 640 Pixel nicht unterschreiten und sollte 11360 Pixel nicht überschreiten.

 

Am Anfang der Datei kann man alle gewünschten Werte definieren. Zu Beginn wird ein Hochpass über das volle Bild gelegt, dazu lässt sich der Pixel-Radius am Anfang definieren.

Dann werden Unscharf-Maskieren-Filter auf den Helligkeitskanal das LAB-Modus angewendet, welche ihre Werte in einem Array gespeichert haben. Die entsprechenden Pixelzahlen, ab denen sie gelten, stehen darüber.

Dann wird das Bild schrittweise immer um 75% verkleinert, bis es den gewünschten Wert erreicht und für jede Stufe kann ein anderer Unscharf-Maskieren-FIlter angewendet werden.

Am Ende wird der Hochpass ineinanderkopiert und auf RBG zurückgestellt.

 

Installation

 

Unten stehenden Code einfach in einer Textdatei speichern und diese mit ".jsx" enden lassen. Dann speichern unter:

...\Adobe\Adobe Photoshop CC 2015\Presets\Scripts

Photoshop neu starten und unter Datei->Skripte findet sich dann das gewünschte Skript. Jetzt kann man das in einer Aktion speichern und nachher als Stapelverarbeitung wunderbar nutzen.

Leider ist es verboten .jsx-Dateien hochzuladen

 

Warum?

Sinn der Sache war eine valide Grundauflösung gerade für Web-Dinge wie flickr zu ermöglichen. Bisherige Aktionen können nur Breite oder Höhe ändern, nicht aber einfach die kurze Seite. So werden Hochkant-Bilder schnell mal sehr schlecht aufgelöst. Man kann zwar zwei verschiedene Aktionen einrichten, aber, wenn man viele Bilder verarbeiten will ist das nicht gerade komfortabel.

 

lange Rede, kurzer Sinn, hier das Skript:

/*
  Skript für die automatische Verkleinerung und Schärfung von Bildern mittels Hochpass und Unscharf-Maskierung des LAB-Helligkeitskanals
  Hierbei wird sich auf die KURZE Seite bezogen, die sozusagen die kleinste Größe angibt.
  Eine Mindestgröße von 640 px muss eingehalten werden, ansonsten funktioniert das Skript nicht.
  Es können Bilder bis zu einer Größe der kurzen Seite von 11360 px verkleinert werden.
*/

/* die Länge der kürzesten Seite */
var shortestsidepx = 1280;

/* Pixel für Hochpass (einmalige Aktion zu Beginn) */
var highpasspixel = 1.5;

// erstelle 2 arrays für Stärke und Radius und Schwellwert
// die auflistung der Werte ist verkehrt herum, damit der Ablauf einfacher wird. Heisst: der erste zu nutzende Wert steht am Ende.
// Schritte sind mit Faktor 1,3333 berechnet

// Länge für jeweilige Unschärfe-Stufe
// (für Werte x <= )                   640 , 854 , 1138 , 1518 , 2023 , 2697 , 3596 , 4794 , 6392 , 8522 , 11360
var unsharparraystrength = new Array(  46  , 46  , 46   , 46   , 47   , 50   , 50   , 50   , 50   , 50   , 50    );
var unsharparrayradius = new Array(    0.1 , 0.1 , 0.1  , 0.1  , 0.2  , 0.2  , 0.3  , 0.3  , 0.3  , 0.3  , 0.3   );
var unsharparraythreshold = new Array( 0   , 0   , 0    , 0    , 0    , 0    , 0    , 0    , 0    , 0    , 0     );

// Save the current preferences

var startRulerUnits = app.preferences.rulerUnits;
var startTypeUnits = app.preferences.typeUnits;
var startDisplayDialogs = app.displayDialogs;

// Set PS to use pixels and display no dialogs

app.preferences.rulerUnits = Units.PIXELS
app.preferences.typeUnits = TypeUnits.PIXELS
app.displayDialogs = DialogModes.NO

// nehme das aktuelle Dokument
doc = app.activeDocument;

/* start */
if( ( shortestsidepx > 640 ) && ( doc.width.value < 11360 ) && ( doc.height.value < 11360 ) )
{
  //dupliziere den Hintergrund
  var layer = doc.backgroundLayer;
  var layerdup = layer.duplicate();
  // Hochpass drüber legen
  layerdup.applyHighPass(highpasspixel);
  // in LAB-Modus ändern
  doc.changeMode( ChangeMode.LAB );
  //  den Kanal für die Helligkeit wählen
  doc.activeChannels = [app.activeDocument.channels.getByName('Helligkeit')];

  // Zählvariable für Anzahl der durchzuführenden Schritte erstellen. Dient als Array-Index
  var counter = 0;

  if( doc.height.value < doc.width.value )
  {
    var newSize = doc.height.value;
  }
  else
  {
    var newSize = doc.width.value;
  }
  // an welcher Stelle beginnt das Array zu arbeiten?
  var arraystart = getBaseLog( 100/75, shortestsidepx / 640 );
  // wieviele Schritte?
  counter = getBaseLog( 100/75, newSize / shortestsidepx );
 
  counter = Math.floor( counter + arraystart );
 
  arraystart = Math.floor( arraystart );
 
  var stop = false;
  // Skalierung beginnen
  while ( counter >= arraystart )
  {
    layer.applyUnSharpMask( unsharparraystrength[counter], unsharparrayradius[counter], unsharparraythreshold[counter] );
    if( stop == true )
    {
      break;
    }
    newSize *= 75/100;
    if(newSize < shortestsidepx)
    {
      newSize = shortestsidepx;
      stop = true;
    }
    if( doc.height.value < doc.width.value )
    {
      resizeHeight( newSize );
    }
    else
    {
      resizeWidth( newSize );
    }
    counter--;
  }
  // wieder auf RGB setzen
  doc.changeMode( ChangeMode.RGB )
  layerdup.blendMode = BlendMode.OVERLAY
}
// Reset the application preferences
app.preferences.rulerUnits = startRulerUnits
app.preferences.typeUnits = startTypeUnits
app.displayDialogs = startDisplayDialogs

function resizeHeight( newSize )
{
  doc.resizeImage( null, UnitValue( newSize, "px" ), null, ResampleMethod.BICUBIC, null )
}

function resizeWidth( newSize )
{
  doc.resizeImage( UnitValue( newSize, "px" ), null, null, ResampleMethod.BICUBIC, null )
}

function getBaseLog ( x, y )
{
  return Math.log( y ) / Math.log( x );
}

Hoffe, es hilft jemandem.

bearbeitet von Neto-Zeme
Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...