Bild zuschneiden und in neuer Spalte speichernIch wollte Bilder zuschneiden und die zugeschnittenen Bilder in einer neuen Spalte speichern.
Mein erster Ansatz war:
for each row (:new col = :old col << crop(...))
... aber dann fand ich den Beitrag von @Craige_Hales in der Community,
https://community.jmp.com/t5/Discussions/Crop-a-JPG-Image/mp/442473/highlight/true#M69072
mit den wichtigen Informationen:

Also habe ich Folgendes versucht:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
for each row (:pet = :picture );
wait(0);
for each row (:pet << Crop( Left( 5 ), Right( 10 ), Top( 6 ), Bottom( 100 ) ));
... ohne Wirkung.
Im Scripting Index habe ich gefunden:

Vielleicht img als temporäre Variable verwenden?
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
for each row( img= :picture;;img << Crop( Left( 5 ), Right( 70 ), Top( 30 ), Bottom( 50 ) );:pet = img)
und tatsächlich:

Aber nachdem ich in die Datentabelle geklickt hatte, bemerkte ich, dass auch die Eingabespalte geändert wurde:

also, mein endgültiges Skript war:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
for each row( img= new image(:picture);img << Crop( Left( 5 ), Right( 70 ), Top( 30 ), Bottom( 50 ) );:pet = img)
- Verwenden Sie neues Bild() , um ein neues Bild zu erstellen
- Größe dieses Bildes ändern
- Speichern Sie es in der neuen Spalte
Automatisierung und SkriptingBetreff: Bild zuschneiden und in neuer Spalte speichernLeider wurden bei meinem tatsächlichen Datensatz nur einige der Bilder zugeschnitten.
Die einfache Erklärung: Ich habe die Bildspalte per Copy/Paste aus einer Powerpoint-Präsentation gefüllt.
Alle Bilder hatten das gleiche Seitenverhältnis und daher die gleiche Größe im JMP-Datenraster – aber nicht die gleiche tatsächliche Größe! Und das Zuschneiden funktioniert nur, wenn die Pixelwerte in den Argumenten kleiner sind als die tatsächliche Größe des Bildes.
Viel einfacher zu erkennen, wenn Sie Bilder mit unterschiedlichen Seitenverhältnissen verwenden (Versuch, einen Demofall für einen Community-Beitrag zu erstellen).

Open( "$SAMPLE_DATA/SAS Offices.jmp" );
New Column( "cropped", Expression);
for each row( img= new image(:Photo);
{w, h} = img << Get Size;
img << Crop( Left( 10 ), Right( 800 ), Top( 10 ), Bottom( 70 ) );:cropped = img)
also, mein endgültiges Skript war:
Open( "$SAMPLE_DATA/SAS Offices.jmp" );
New Column( "cropped", Expression );
For Each Row(
try(img = New Image( :Photo );
{w, h} = img << Get Size;
target = 500;
img << scale( 500 / w );
{w, h} = img << Get Size;
img << Crop( Left( Round( w / 3 ) ), Right( Round( w / 3 * 2 ) ), Top( Round( h / 10 ) ), Bottom( Round( h / 5 ) ) );
:cropped = img;)
);
Ausprobieren? -> nur für den Fall, dass eines der Bilder fehlt.
Betreff: Bild zuschneiden und in neuer Spalte speichernDas ist nicht schwer.
Ich glaube, der schwierige Teil besteht darin, den Hintergrund eines Bildes transparent zu machen und ihn auf andere Bilder zu legen.
JSL verfügt nicht über die Funktion, den Hintergrund von Bildern transparent zu machen.
Dies kann nur mit Hilfe anderer Software erreicht werden
Betreff: Bild zuschneiden und in neuer Spalte speichernrun program(executable("I:\00\FastStoneIV\magick.exe"),options({目||" -fill none -fuzz 0% -draw \!"color 92,30 floodfill\!" "||标}));
