Ich erstelle Thumbnails für einen Digital Asset Manager, was ist der beste Weg, dies mit Imagemagick zu tun?Convert .psd und .ai zu PNG/JPG mit Imagick
Gibt es eine gute Ressource da draußen?
Ich erstelle Thumbnails für einen Digital Asset Manager, was ist der beste Weg, dies mit Imagemagick zu tun?Convert .psd und .ai zu PNG/JPG mit Imagick
Gibt es eine gute Ressource da draußen?
Ich löste es und werde mit der WELT teilen! Es konvertiert .ai, .psd, .jpg, .png, .gif in Thumbnails.
Hier ist eine Funktion, die 4 params nimmt:
$ dir - Verzeichnis zu speichern.
$ tmpName - der Name, um die Datei ohne die Erweiterung zu benennen.
$ dateiTyp - selbsterklärend.
$ Größe - groß oder klein.
function thumbGenerator($dir,$tmpName,$fileType,$size){
$saveFileType = "png";
$imagePath = $dir.$tmpName.".".$fileType;
$image = new Imagick();
$image->readimage($imagePath);
if($fileType == "psd"){
$image->setIteratorIndex(0);
}
$dimensions = $image->getImageGeometry();
$width = $dimensions['width'];
$height = $dimensions['height'];
if($size == "large"){
$maxWidth = 720;
$maxHeight =720;
}
if($size == "small"){
$maxWidth = 250;
$maxHeight =250;
}
if($height > $width){
//Portrait
if($height > $maxHeight)
$image->thumbnailImage(0, $maxHeight);
$dimensions = $image->getImageGeometry();
if($dimensions['width'] > $maxWidth){
$image->thumbnailImage($maxWidth, 0);
}
}elseif($height < $width){
//Landscape
$image->thumbnailImage($maxWidth, 0);
}else{
//square
$image->thumbnailImage($maxWidth, 0);
}
if($size == "large"){
$image->writeImage($dir . $tmpName."-lg.".$saveFileType);
}
if($size == "small"){
$image->writeImage($dir . $tmpName."-sm.".$saveFileType);;
}
}
Wenn es funktioniert, dann akzeptiere deine Antwort. Prost! –
@Jason - Danke für das Teilen. Hier sind ein paar Tipps für eine sauberere und einfachere Pflege/Erweiterung des Codes. Auch hier hängt viel davon von Ihren Anforderungen ab. Außerdem habe ich diesen Code nicht wirklich ausgeführt, also vergib mir irgendwelche Tippfehler.
$ dir - Verzeichnis zum Speichern.
$ tmpName - der Name, um die Datei ohne die Erweiterung zu benennen.
$ dateiTyp - selbsterklärend.
$ Größe - groß oder klein. Sie können einen Pixelbreitenwert für das Miniaturbild anstelle einer Zeichenfolge für eine vordefinierte Breite verwenden. Angenommen, Sie benötigen in Zukunft ein größeres Thumbnail in einem neuen Abschnitt Ihrer Seite (z. B. Retina-fähige Symbole mit 500px für "kleine" Thumbnails). Sie sollten vorzugsweise die Größe im neuen Teil des Codes definieren, anstatt in der gemeinsamen thumbGenerator Funktion
function thumbGenerator($dir,$tmpName,$fileType,$size){
$saveFileType = "png";
$imagePath = $dir.$tmpName.".".$fileType;
$image = new Imagick();
$image->readimage($imagePath);
if($fileType == "psd"){
$image->setIteratorIndex(0);
}
/* Simplify this code section below
$dimensions = $image->getImageGeometry();
$width = $dimensions['width'];
$height = $dimensions['height'];
*/
list($width,$height) = $image->getImageGeometry(); // <--- new code
/* Use $size for the pixel width/height instead and remove the code below
if($size == "large"){
$maxWidth = 720;
$maxHeight =720;
}
if($size == "small"){
$maxWidth = 250;
$maxHeight =250;
}
*/
if($height > $width){
//Portrait
if($height > $size)
$image->thumbnailImage(0, $size);
$dimensions = $image->getImageGeometry();
if($width > $size){ // <--- use the previously created $width variable
$image->thumbnailImage($size, 0);
}
/* Don't need this duplicate code.
}elseif($height < $width){
//Landscape
$image->thumbnailImage($maxWidth, 0);
*/
}else{
// square or landscape
$image->thumbnailImage($maxWidth, 0);
}
/* DRY - do not repeat yourself - Simplify it and use the pixel width in the image name
if($size == "large"){
$image->writeImage($dir . $tmpName."-lg.".$saveFileType);
}
if($size == "small"){
$image->writeImage($dir . $tmpName."-sm.".$saveFileType);;
}
*/
$image->writeImage($dir . $tmpName."-".$size.".".$saveFileType);;
}
Danke, für die Rückmeldung. Es ist erstaunlich, wie schnell du etwas lernen kannst, komm in einem Monat zurück und du würdest es nie wieder so machen. Einige dieser Funktionen, die Sie als Wiederholung auskommentiert haben, sind tatsächlich notwendig, da sie anwendungsspezifisch sind. Ich schätze die Kritik. Vielen Dank! –
Haben Sie diesen Code tatsächlich getestet? Es funktioniert nicht für mich, insbesondere der 'list ($ width, $ height) = $ image-> getImageGeometry()' Teil. da das Ergebnis kein Array der Größe 2 ist, sondern ein assoziatives Array ('width' => 23, 'height' => 42) ' –
Kommandozeile ImageMagick hat 'convert'. probiere 'orig.psd output.jpg' und schau, ob es das auch macht - wenn ja, dann kannst du mit den Größenänderungsoptionen herumspielen. Wenn nicht, dann verschwendest du keine Zeit damit, den falschen Baum zu bellen. –
gibt es eine Möglichkeit, ich kann Kommandozeilen-Sachen von PHP (Imagick) tun? –
Das ist nur so, Sie können die Konvertierung testen und sehen, ob es überhaupt funktioniert. Ein einfacher Befehl vs. ein paar Stunden lang versuchte ich ein php-Skript zu knacken, um das Gleiche zu tun. –