wethlo 0 Geschrieben 18. Februar 2023 Melden Teilen Geschrieben 18. Februar 2023 Hallo zusammen! Bin Lehrer für CNC-Technik und habe leider von Powershell etc. leider keine bis fast keine Ahnung. Trotzdem bin ich auf der Suche nach einem Script, welches mir emf-Dateien (Anzahl X) in z.B. jpg umwandelt (wenn die Transparenz der Bilddatei verloren geht ist das egal). Die Traumvorstellung zusätzlich wäre, dass dann diese jpg-Datei automatisch um 180 Grad gedreht wird und mit einer Erweiterung des Dateinamens (z.B. (180)) im selben Ordner abgespeichert wird. Geht so etwas grundsätzlich oder muss ich mich hier anders helfen? Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 18. Februar 2023 Melden Teilen Geschrieben 18. Februar 2023 Das geht mit purem PowerShell eher nicht so einfach. Du könntest aber externe Tools wie z.B. ImageMagic mit einbinden und diese über die Kommandozeile mit den Bildern und zugehörigen Parametern füttern. Für Deinen Einsatz-Zweck deutlich besser geeignet wäre vermutlich IrfanView. Das hat einen Batch-Modus bei dem Du die gleichen Arbeits- und Umwandlungs-Schritte auf einen ganzen Schwung an Bild-Dateien anwenden kannst. Schau es Dir doch mal an. 2 Zitieren Link zu diesem Kommentar
wethlo 0 Geschrieben 21. Februar 2023 Autor Melden Teilen Geschrieben 21. Februar 2023 Guten Abend! Vielen Dank für den Tipp! Werde ich mir anschauen. Bin allerdings im Netz noch auf nachfolgenden Code gestoßen... Kann mir jemand sagen, wie ich wo den Pfad des Ordners angeben kann, in dem die EMF-Dateien gespeichert sind? So wie ich den Code interpretiere, kann dieser genau das, was ich benötige: Und zwar EMF-Dateien in Jpeg umwandeln... enum ImageFormat { MemoryBMP; Bmp ; Emf; Wmf; Jpeg; Png; Gif; Tiff; Exif; PhotoCD; Icon } function ConvertTo-Image { <# .SYNOPSIS Converts input to an image .DESCRIPTION Converts input file to an image. Supported output types: MemoryBMP, Bmp , Emf, Wmf, Jpeg, Png, Gif, Tiff, Exif, PhotoCD, Icon .PARAMETER Files Input files .PARAMETER Format Output Image format type .EXAMPLE Get-ChildItem C:\test -Filter "*.gif" | ConvertTo-Image -Format Png Converts all gif animations from location 'C:\test' into png files #> [CmdletBinding()] param( [Parameter(Mandatory = $false, Position = 0, ValueFromPipeline = $true)] $Files, [ImageFormat] [Parameter(Mandatory = $true, Position = 1)] $Format ) begin { Write-Verbose "Conversion start" } process { function Get-ImageFormat { param ($format) switch ($format) { "MemoryBMP" { [System.Drawing.Imaging.ImageFormat]::MemoryBMP } "Bmp" { [System.Drawing.Imaging.ImageFormat]::Bmp } "Emf" { [System.Drawing.Imaging.ImageFormat]::Emf } "Wmf" { [System.Drawing.Imaging.ImageFormat]::Wmf } "Jpeg" { [System.Drawing.Imaging.ImageFormat]::Jpeg } "Png" { [System.Drawing.Imaging.ImageFormat]::Png } "Gif" { [System.Drawing.Imaging.ImageFormat]::Gif } "Tiff" { [System.Drawing.Imaging.ImageFormat]::Tiff } "Exif" { [System.Drawing.Imaging.ImageFormat]::Exif } "Icon" { [System.Drawing.Imaging.ImageFormat]::Icon } Default { } } } $formatType = Get-ImageFormat $Format $fullName = $input.FullName $image = [System.Drawing.Image]::FromFile($fullName); $filePath = [IO.Path]::ChangeExtension($fullName, ".$($formatType.ToString().ToLower())"); $image.Save($filePath, $formatType); $image.Dispose(); } end { Write-Verbose "Conversion done" } } Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 21. Februar 2023 Melden Teilen Geschrieben 21. Februar 2023 vor 41 Minuten schrieb wethlo: Kann mir jemand sagen, wie ich wo den Pfad des Ordners angeben kann, in dem die EMF-Dateien gespeichert sind? Hast Du's mal mit dem Beispiel versucht, was in der enthaltenen Hilfe-Sektion gezeigt wird? Im Zweifel hättest Du den Autor des Codes befragen können .... Mit dieser Methode hast Du übrigens keine Möglichkeit, die Umwandlung irgendwie noch irgendwie zu beeinflussen. Bei IrfanView könntest Du noch an vielen kleinen Schräubchen drehen falls nötig. Zitieren Link zu diesem Kommentar
wethlo 0 Geschrieben 21. Februar 2023 Autor Melden Teilen Geschrieben 21. Februar 2023 (bearbeitet) Ja hab es versucht... Leider kommt folgende Antwort: Der Typ [ImageFormat] wurde nicht gefunden. In C:\Users\wethlo_\Desktop\umwandeln.ps1:6 Zeichen:5 + [ImageFormat] + ~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (ImageFormat:TypeName) [], RuntimeException + FullyQualifiedErrorId : TypeNotFound Der Code sieht nun so aus: function ConvertTo-Image { [CmdletBinding()] param( [Parameter(Mandatory = $false, Position = 0, ValueFromPipeline = $true)] $Files, [ImageFormat] [Parameter(Mandatory = $true, Position = 1)] $Format ) begin { Write-Verbose "Conversion start" } process { function Get-ImageFormat { param ($format) switch ($format) { "MemoryBMP" { [System.Drawing.Imaging.ImageFormat]::MemoryBMP } "Bmp" { [System.Drawing.Imaging.ImageFormat]::Bmp } "Emf" { [System.Drawing.Imaging.ImageFormat]::Emf } "Wmf" { [System.Drawing.Imaging.ImageFormat]::Wmf } "Jpeg" { [System.Drawing.Imaging.ImageFormat]::Jpeg } "Png" { [System.Drawing.Imaging.ImageFormat]::Png } "Gif" { [System.Drawing.Imaging.ImageFormat]::Gif } "Tiff" { [System.Drawing.Imaging.ImageFormat]::Tiff } "Exif" { [System.Drawing.Imaging.ImageFormat]::Exif } "Icon" { [System.Drawing.Imaging.ImageFormat]::Icon } Default { } } } $formatType = Get-ImageFormat $Format $fullName = $input.FullName $image = [System.Drawing.Image]::FromFile($fullName); $filePath = [IO.Path]::ChangeExtension($fullName, ".$($formatType.ToString().ToLower())"); $image.Save($filePath, $formatType); $image.Dispose(); } end { Write-Verbose "Conversion done" } } $ordner = "C:\Users\wethlo_\Desktop\Test" Get-ChildItem -Path $ordner -Filter "*.emf" | ConvertTo-Image -Format Jpeg bearbeitet 21. Februar 2023 von wethlo Zitieren Link zu diesem Kommentar
mwiederkehr 373 Geschrieben 21. Februar 2023 Melden Teilen Geschrieben 21. Februar 2023 vor 15 Minuten schrieb wethlo: Der Typ [ImageFormat] wurde nicht gefunden. Du musst den Enum aus der Beispieldatei ganz oben drin lassen. vor 44 Minuten schrieb BOfH_666: Mit dieser Methode hast Du übrigens keine Möglichkeit, die Umwandlung irgendwie noch irgendwie zu beeinflussen. Ganz wichtiger Punkt. Ich sehe nicht, wie man ohne zusätzliche Optionen ein Vektorformat wie EMF in ein Rasterformat wie JPG umwandeln können will. Zitieren Link zu diesem Kommentar
NilsK 2.933 Geschrieben 22. Februar 2023 Melden Teilen Geschrieben 22. Februar 2023 Moin, dann fragen wir doch mal andersrum: Was ist denn der Grund für die Konvertierung? Wenn wir den Zusammenhang kennen, können wir vielleicht besser unterstützen. Sonst müssen wir immer rumstochern. Gruß, Nils Zitieren Link zu diesem Kommentar
wethlo 0 Geschrieben 22. Februar 2023 Autor Melden Teilen Geschrieben 22. Februar 2023 Wie in meiner ersten Frage schon erläutert ist das Bildformat EMF für die Software von unserem Etikettendrucker nicht verwendbar. Ich habe die Software nun soweit optimiert, dass ich die zweite Datei mit der Erweiterung (180) nicht mehr benötige, da ein Bild im BMP-Format um 180° gedreht werden kann. Was allerdings notwendig ist, wäre das Konvertieren von mehreren EMF-Files in das zu favorisierende BMP-Format... Der Dateiname kann/soll gleich bleiben. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 22. Februar 2023 Melden Teilen Geschrieben 22. Februar 2023 Wie weit muss denn das automatisiert werden? Hast Du Dir IrfanView denn schon mal angeguckt? Wie gesagt - mit IrfanView kannst Du Format-Umwandlungen und Bild-Transformationen in einem Rutsch erledigen. Zitieren Link zu diesem Kommentar
NilsK 2.933 Geschrieben 22. Februar 2023 Melden Teilen Geschrieben 22. Februar 2023 (bearbeitet) Moin, vor einer Stunde schrieb wethlo: Wie in meiner ersten Frage schon erläutert ist das Bildformat EMF für die Software von unserem Etikettendrucker nicht verwendbar. nein, das hast du nicht erwähnt. Also geht es darum, so etwas regelmäßig zu machen? Um welche Anzahlen geht es dabei (Größenordnung)? Und wie Olaf schon fragt: Muss das automatisiert werden? Wenn ja, wie weit - ist das Umwandeln Teil eines größeren Ablaufs? Wenn wir dir sowas nicht einzeln rauskitzeln müssen, können wir vermutlich bessere Hinweise geben. Gruß, Nils PS. Olafs Hinweis auf IrfanView ist schon deshalb gut, weil man das auch per Kommandozeile steuern, also automatisieren kann. bearbeitet 22. Februar 2023 von NilsK 1 Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 22. Februar 2023 Melden Teilen Geschrieben 22. Februar 2023 Achtung! Irfan View darf Kommerziell nicht ohne Lizenz genutzt werden: https://www.irfanview.de/lizenzierung/ 1 Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 22. Februar 2023 Melden Teilen Geschrieben 22. Februar 2023 Die 10 EURO sollte man sich leisten können. ;) Zitieren Link zu diesem Kommentar
NilsK 2.933 Geschrieben 22. Februar 2023 Melden Teilen Geschrieben 22. Februar 2023 Moin, das ist korrekt, aber besser solltest du auf die offizielle Seite verweisen, nicht auf eine inoffizielle. https://www.irfanview.com/index.htm Und: Auch Schulen brauchen keine Lizenz, das könnte evtl. beim TO zutreffen. Gruß, Nils 1 Zitieren Link zu diesem Kommentar
wethlo 0 Geschrieben 22. Februar 2023 Autor Melden Teilen Geschrieben 22. Februar 2023 Ich versuche es mal in kurze Worte zu fassen für was ich das benötige: Wir exportieren aus unserer CAD-Software fertige CNC-Programme. Zusätzlich wird automatisch von jedem zu exportierenden Teil ein EMF-Bild in den selben Ordner mit selbem Namen gespeichert. Dieses EMF-Bild benötige ich für die im Nachgang erstellten Nesting-Programme. Hier werden viele Einzelteile aus einer kompletten Platte herausgenestet. Jedes Teil bekommt ein Label. Auf dieses Label kommt das besagte Bild. Allerdings geht dies nicht im EMF-Format sondern vorzugsweise im BMP-Format. Mit nachfolgendem Skript wird zusätzlich noch ein Makro in einer Excel-Datei ausgelöst (der Einfachheit halber wird nach der aktuellsten Excel-Datei in einem Verzeichnis gesucht), welches mir eine CSV-Datei exportiert, welche ich für den selben Prozess benötige. Diesem Script sollte nun das Konvertieren der EMF-Files (können 1 bis unendlich viele sein) in BMP-Files hinzugefügt werden. Die EMF-Dateien sind dann auch im selben Verzeichnis wie die Excel-Datei. Habe mir IrfanView heruntergeladen und mal manuell versucht, die Einzelbilder umzuwandeln, was sehr gut funktioniert hat. Habe allerdings die Einstellung auf Schwarz/Weiß gestellt, damit die Dateigröße nicht exorbitant groß wird. Der Etikettendrucker kann sowieso nur S/W. Könnte man dem Skript das Umwandeln hinzufügen oder ist das utopisch? Da ich Schreinermeister und Lehrer für CAD/CNC-Technik bin, habe ich hiervon leider nicht viel bis keine Ahnung und dachte, dass mir hier jemand helfen könnte. Der ganze Prozess bildet im Prinzip einen kompletten digitalen Workflow einer modernen Schreinerei ab. Anbei das bisher funktionierende Script, welches das Makro in der aktuellsten Excel-Datei aus dem Verzeichnis auslöst: $Excel = New-Object -Comobject Excel.Application $Excel.Visible = $true $Dir = "C:\CADLINE\_Einzelteile" $Filepath = ((gci $Dir -recurse | where name -like "*xlsm" | sort LastWriteTime -Descending)[0]).FullName $Workbook = $Excel.Workbooks.Open($Filepath) $Excel.Run("MCStudioExport") $Excel.ActiveWorkbook.Save() $Workbook.Close() $excel.Quit() [System.GC]::Collect() [System.GC]::WaitForPendingFinalizers() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workBook) [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) Remove-Variable -Name excel Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 22. Februar 2023 Melden Teilen Geschrieben 22. Februar 2023 (bearbeitet) Etiketten-Drucken klingt wie eine Aufgabe, die wenigstens teilweise manuell ausgeführt wird. Also wäre vielleicht ein weiterer kleiner manueller Schritt kein allzu großer Bruch in Deinem Prozess. Du könntest ja schließlich mit dem Batch-Modus von IrfanView alle *.emf-Dateien in einem Rutsch in *.bmp-Dateien umwandeln vor einer Stunde schrieb wethlo: Habe mir IrfanView heruntergeladen und mal manuell versucht, die Einzelbilder umzuwandeln, was sehr gut funktioniert hat. Habe allerdings die Einstellung auf Schwarz/Weiß gestellt, damit die Dateigröße nicht exorbitant groß wird. Der Etikettendrucker kann sowieso nur S/W. Könnte man dem Skript das Umwandeln hinzufügen oder ist das utopisch? Um's kurz zu machen ... ja - kann man. Da Du ja den Pfad der Excel-Datei bereits ermittelt hast und, wenn ich das richtig verstanden habe, die *.emf-Dateien im gleichen Ordner liegen, müsstest Du mit folgendem Schnipsel im Idealfall alle enthaltenen *.emf-Dateien umwandeln können. i_view64.exe "$($FilePath.Directory.FullName)\*.emf" /convert="$($FilePath.Directory.FullName)\*.bmp" Eventuell musst Du noch den vollen Pfad zu IrfnaView angeben und Du kannst natülich auch einen anderen Ausgabepfad für die *.bmp-Dateien angeben. Sollten für die Umwandlung noch weitere Kommandozeilenargumente nötig sein, musst Du Dir die aus der IrfanView-Hilfe suchen. bearbeitet 22. Februar 2023 von BOfH_666 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.