TonUINO-Covermaker (online)

Vielen Dank!
Stimmt mit dem Internet Explorer geht´s. Der speichert das dann als *.png. Hatte es mit Crome und Firefox ausprobiert aber nicht mit dem Explorer :grinning:

Den sollte man als normaler Mensch auch nicht nutzen :wink:

1 „Gefällt mir“

Mit Safari hat es auch ohne Probleme funktioniert - ich schaue mir den Code mal an… vielleicht finde ich ja heraus warum Chrome nicht will

Ich wollte nur zurück melden, dass es auch auf dem Mac nicht mit Firefox ordentlich funktioniert. Aber mit Safari läuft es. Danke!

Das Tool funktioniert super!
[Chrome Version 75.0.3770.100 (Offizieller Build) (32-Bit)]

Vielen Dank dafür

Hallo zusammen,
Danke erst einmal für die Veröffentlichung des Scource Codes durch @Thorsten und die PowerShell Umsetzung von @Dave!

Obwohl ich bisher noch nicht mit ImageMagick gearbeitet habe, war es damit einfach, das in bash umzusetzen. Ich habe noch folgende Veränderung vorgenommen:

  1. Umstellen der Berechnung: Ich weiß nicht, wie und wann PHP rundet, aber ich habe vorausgesetzt, dass einfach die kleinere Dimension beibehalten wird und die andere entsprechend vergrößert wird. So werden keine „unnötigen“ Bildpunkte erzeugt und ich kann alle Rechnungen so umstellen, dass zuerst multipliziert und dann dividiert wird.
  2. Ich habe ein bischen im ImageMagick Handbuch gestöbert und glaube, dass ich die zweite temporäre Instanz (bzw. die zweite Temporärdatei) los geworden bin.
  3. Die Temporärdatei wird am Ende gelöscht.

Daher übergebe ich hiermit das Skriptchen zum Testen und Probieren - aber ohne Garantie!

#!/bin/bash
#
# Create image with aspect ratio according to preset size.
# Offline version of http://voss.earth/TonUINO-Covermaker/
# See description/discussion in
# http://discourse.voss.earth/t/nutzt-einer-den-tonuino-covermaker-bzw-hat-den-mal-jemand-probiert
#
# Command line Parameter:
# $1 - Source file
# $2 - Blur operator (optional), see
#    https://www.imagemagick.org/script/command-line-options.php#gaussian-blur


#
# Configuration
#

# Destination size (choose unit to get integer values, e.g. 0.1mm)
# These values match Herma No. 5028, giving a ratio of 1.649606299.
dstSizeX=838
dstSizeY=508

# Default blur operator (used when $2 is not specified)
blurDefault=0x4                         

# Temorary file for background
background=covermakerBackground.jpg


#
# No configuration below this line
#
##############################################################################


#
# Gather data
#

# Evaluate input file
file="$1"
if [ ! -f "$file" ]; then
    echo "File not found: $file"
    exit 1
fi

# Evaluate blur operator
blur=${2:-$blurDefault}


# Split input file name and build output file name
extension="${file##*.}"
filename="${file%.*}"
outputFile="${filename}_label.$extension"

# Get resolution from input file
inSizeX=$(identify -format "%[width]" "$file")
inSizeY=$(identify -format "%[height]" "$file")

# Make sure, we can make calculation with size
inSizeX=$((inSizeX))
inSizeY=$((inSizeY))

# Calculate resolution of output (including correct rounding)
if [ $((dstSizeX*inSizeY)) -gt $((inSizeX*dstSizeY)) ]; then
    # Theoretical formula for dstSizeX/dstSizeY > inSizeX/inSizeY:
    # yOut = yIn; xOut = xDest/yDest * yOut
    outSizeX=$(( (2*dstSizeX*inSizeY + dstSizeY) / (2*dstSizeY) ))
    outSizeY=$((inSizeY))
else
    # Theoretical formula for dstSizeX/dstSizeY <= inSizeX/inSizeY:
    # xOut = xIn; yOut = yDest/xDest * xOut
    outSizeX=$((inSizeX))
    outSizeY=$(( (2*dstSizeY*inSizeX + dstSizeX) / (2*dstSizeX) ))
fi

# Summary in one line (for processing multiple images)
echo -n "$file ${inSizeX}x${inSizeY} --$blur-> $outputFile ${outSizeX}x${outSizeY}"


#
# Do the work
#

# Build blurred background
convert -adaptive-resize "$((inSizeX/10))x$((inSizeY/10))!" \
        -gaussian-blur "$blur" \
        -adaptive-resize "$((outSizeX))x$((outSizeY))!" \
        -virtual-pixel mirror \
        "$file" "$background"

# Put the original image in the middle of the background and be done
convert "$background" "$file" \
        -gravity center -composite \
        -compose src-atop \
        -flatten \
        "$outputFile"


#
# Clean up
#

# Delete temporary file
rm "$background"

echo "."

Viel Erfolg damit!
Über Rückmeldung würde ich mich freuen - falls etwas nicht funktioniert, bräuchte ich zumindest die Breite und Höhe der Eingangs- und Ausgangsdatei.

2 „Gefällt mir“

Wozu genau wird die Berechnung eigentlich benötigt? Imagemagick versucht doch bei resize automatisch das originale Seitenverhältnis beizubehalten und verändert das Bild so, dass es in die angegebene Box passt.

http://www.imagemagick.org/Usage/resize/#resize

The argument to the resize operator is the area into which the image should be fitted. This area is not the final size of the image but the maximum size of the area into which the image is to be fitted. That is because IM tries to preserve the aspect ratio of the image more than the final (unless a ‚!‘ flag is given), but at least one (if not both) of the final dimensions should match the argument given image.

Hallo nanos,
Danke für die Nachfrage: Ich habe früher mit dem encoden von Videos ein bischen Erfahrung gesammelt. Daher kommt eine implizite Voraussetzung, die ich gar nicht erwähnt hatte:
Meistens kostet Skalieren Information und damit Qualität - mal mehr mal weniger. Ich versuche daher grundsätzlich, unnötiges Skalieren zu vermeiden.
In meinem Skript wird daher das Original Cover in unveränderter Größe in den Hintergrund hineinenkopiert. Dafür wird der Hintergrund in der richtigen Größe „gebaut“. Und dafür muss ich die nicht-konstante Größe berechnen.
Mir ist klar, dass ich auch so Qualität verliere, weil ich das jpg decodiere und neu codieren muss. Und die harte Kante wird nur in den wenigsten Fällen günstig für den Encoder liegen, aber da habe ich mit den Standard-Einstellungen von ImageMagick keine Probleme gesehen (kann ja alles mit entsprechender Dateigröße erkauft werden).
Als Alternative mit Skalieren sehe ich eigentlich nur, die Auflösung so weit hoch zu drehen, dass ich auch wieder keinen nennenswerten Informationsverlust habe. Dabei wird aber auch die Datei wieder unnötig groß. Ich habe daher lieber ein paar Zeilen mehr im Skript.
Aber falls jemand eine bessere Lösung, freue ich mich immer, dazu zu lernen!

1 „Gefällt mir“

Servus,
kann man das Tool auch lokal nutzen?
Wenn ja wie setze ich das um?
Danke.

Theoretisch ist das möglich, praktisch aber mit einigem Aufwand verbunden: Apache, php und ImageMagick php extension installieren und konfigurieren, den php Code weiter oben kopieren, die Webseite kopieren oder eine eigene bauen und auf deinem Server an den richtigen Stellen hinterlegen. So könntest du das Tool theoretisch auch „lokal“ bzw. auf deinem eigenen Server nutzen. Aber was hast du denn genau vor?

Alternativ hat @LeffSpike ein paar Posts weiter oben eine sehr elegante Lösung präsentiert die sich lokal in der bash ausführen lässt und noch weiter oben hatte ich ein paar Zeilen Powershell gepostet mit der das erstellen der Cover prinzipiell unter Windows funktioniert.

OK Danke für die Antwort.
Da ich aber nicht viel Ahnung davon habe, wäre ich für etwas unter die Arme greifen Dankbar.
Was muss ich machen damit ich das unter Windows zu laufen bekomme?
Danke

Erstmal musst du ImageMagick installieren: https://imagemagick.org/script/download.php
Je nach System in 32 oder 64 bit.
Im Installationsassistenten sicher stellen, dass die „Tools“ oder „Legacy Tools“ (weiß es grad nicht aus dem Kopf wie die Option genau hieß) mit installiert werden. Die werden für das Skript benötigt (s.u.: „convert“ und „identify“). Außerdem muss ImageMagick zur PATH Umgebungsvariablen hinzugefügt werden. Auch dafür bietet der Assistent eine Option.

Anschließend kannst du die Powershell starten und mittels dem Befehl
cd C:\Hier\liegen\die\Bilder
in den Ordner wechseln, wo deine Bilder liegen.

Im Prinzip kannst du den Code hier direkt kopieren, in die Powershell einfügen und nochmal Enter drücken. Alternativ kannst du natürlich vorher auch noch etwas an der Konfiguration schrauben. Was dann passiert ist folgendes:
Es werden im aktuellen Ordner alle jp*g Dateien (vermutlich ginge es auch mit anderen Bildformaten) gesucht und dann aus jedem einzelnen Bild ein Cover nach dem Vorbild des TonUINO Covermakers erstellt. Die Originaldateien werden nicht verändert, es wird jeweils eine neue Datei nach dem Schema „TonUINO_Cover_[Originaldateiname]“ erstellt.

### Konfiguration ###
$height_param=508
$width_param=838
$blur_param="0x4"
###

$background="covermakerBackground.jpg"
$files=gci -file -name *.jp*g
foreach ($file in $files)
{
$targetfile="TonUINO_Cover_$file"
$sizex=identify -format "%[width]" "$file"
$sizex=$sizex -as [int]
$sizey=identify -format "%[height]" "$file"
$sizey=$sizey -as [int]

if ( $width_param*$sizey -gt $sizex*$height_param )
{
$outSizeX=(2*$width_param*$sizey + $height_param) / (2*$height_param) -as [int]
$outSizeY=$sizey
}
else {
$outSizeX=$sizex
$outSizeY=(2*$height_param*$sizex + $width_param) / (2*$width_param) -as [int]
}

$resize1="$($sizex/10)" + "x" + "$($sizey/10)" + "!"
$resize2="$outSizeX" + "x" + "$outSizeY" + "!"
convert -adaptive-resize "$resize1" -gaussian-blur "$blur_param" -adaptive-resize "$resize2" -virtual-pixel mirror "$file" "$background"

convert "$background" "$file" -gravity center -composite -compose src-atop -flatten "$targetfile" 

remove-item $background
}
1 „Gefällt mir“

Danke schonmal.
Das mit dem Tool habe ich hinbekommen, nur sind die Bilder jetzt schwarz Weiß. Wie kann ich das umstellen?

Da bin ich jetzt ehrlich gesagt etwas ratlos. Du hast den Code in der Powershell ausgeführt und es wurden Dateien erstellt deren Name mit „TonUINO_Cover_“ beginnt? Dann sind zumindest die ImageMagick Befehle anscheinend durchgelaufen. Die erstellten Bilder sind dann vom eigentlichen Bildinhalt korrekt, aber statt in Farbe sind sie schwarz-weiß? Gab es beim Ausführen in der Powershell irgend eine Ausgabe? Wie ist denn die Ausgabe von „convert -version“?

Ich habe den Code mal etwas angepasst, weil Dateien mit Leerzeichen nicht konvertiert wurden und der „blur“ Parameter nicht übergeben wurde, aber dein Problem klingt nach was ganz anderem. Auf der ImageMagick Seite gibt es noch den Hinweis, dass man bei Problemen die Visual C++ Redistributable installieren soll (https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads).

Richtig. Powershell läuft durch, erstellt die Dateien und gibt die Datei mit TonUINO_Cover*** wieder aus. Nur dieses ist dann schwarz weiß. Ändere ich folgende Zeile

convert -size "$($sizex*$ratio)""x""$sizey" xc:black "im_out.jpg"

in

convert -size "$($sizex*$ratio)""x""$sizey" xc:blue "im_out.jpg"

ist alles farbig.

Nur das kann doch nicht das Problem sein.

1 „Gefällt mir“


im_background


im_out


im_out2

Ist ja merkwürdig. Bei mir funktioniert das auf 2 verschiedenen Systemen genau so. Der Befehl erstellt ja nur ein schwarzes Bild, was als Grundlage für die weiteren Schritte genutzt wird und ich hatte es einfach so aus Thorstens php Code übernommen. Vermutlich ist dein ImageMagick der Meinung, dass man bei einem schwarzen Bild im weiteren Verlauf einfach keine Farbe braucht. Das Verhalten kann sich ja von Version zu Version immer mal etwas unterscheiden. So gut kenne ich mich da aber auch nicht aus.

Ich habe jetzt die Berechnung und die Aufrufe von @LeffSpike einfach mal in Powershell umgesetzt. Besten Dank für die Weiterentwicklung :slight_smile:
Netterweise kommt diese Lösung mit wesentlich weniger temporären Dateien / Zwischenschritten aus und auch bei nicht quadratischen Bildern sowohl im Hoch- als auch Querformat ist das Ergebnis so weit ich sehen konnte super.
Löst es das Problem, wenn du den nochmal abgeänderten Code aus meinem Post oben nimmst?

Ich muss diesen Thread leider noch mal auf machen.
Lassen sich die verlinkten Sticke auch im Canon Selphy CP710 verwenden? Das ist einer der ersten dieser Druckerserie und so einer schlummert noch bei mir im Schrank. Ich habe leider nirgendwo eine Antwort finden können.

Hab da mal eine Frage, weiß nicht ob ich einfach zu blind bin…
Die Cover werden bei mir ohne Probleme erstellt, aber ich kann das Cover nur als .php abspeichern. Wie kriege ich denn von dem erstellten Cover eine .jpeg?

Ja, das ist irgendwie geändert worden. Das war früher nicht so.
Du kannst die Datei als php speichern und anschließend im Explorer aus der Dateiendung .php eine .png machen.

@Thorsten Kannst du das evtl. anpassen?

1 „Gefällt mir“