anmerkung: functions.api.images.php

emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

anmerkung: functions.api.images.php

Beitrag von emergence »

ich seh mir gerade wieder mal ein paar sachen in der datei an...

da ist mir aufgefallen das ein code teil 3 mal wiederholt wird...

und zwar

/* Calculate the aspect ratio */

sollte das nicht vielleicht in eine eigene funktion ausgelagert werden, die als ergebniss $x, $y, $targetX, $targetY zurückliefert ?

der teilbereich hat beim zurückliefert der $target werte sowieso nen kleinen bug... es wäre möglich das $targetX oder $targetY durch die rundung auf 0 gesetzt wird... was in weiterer folge natürlich zu einem fehler beim resize führt...

eine ergänzung von

Code: Alles auswählen

	$targetX = ($targetX != 0) ? $targetX : 1;
	$targetY = ($targetY != 0) ? $targetY : 1;
sollte das problemchen beheben..

aber noch zu was anderem
ich möchte ein bild dimensionierung 300x200
auf 50x50 zurechtschneiden... ohne dass das bild verzerrt wird...

wenn ich das momentan richtig gesehen habe, ist das jetzt nicht möglich, oder irre ich mich ?
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

naja von 300x200 auf 50x50 wird ohne verzerrung nicht gehen, nur mit abschneiden

je nachdem wie du es machst wird entweder ein teil des originalbildes verlohren gehen oder du hast einen weißen Rand irgendwo.

wir haben das hier so gelöst, das Bild wird 180x180 pixel skaliert und dann auf 90x90 pixel gecropt.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ähm das ist schon richtig...

das was ich machen will soll ungefähr wie folgt funktionieren...

das bild mit 300x200 wird auf 200x200 via crop zurechtgeschnitten und anschließend auf 50x50 verkleinert...

sind an sich zwei tätigkeiten die ausgeführt werden sollen...

die funktionen machen momentan ja nichts anderes wie nur resize oder nur crop, oder ginge beides ?
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

nein, aber du kannst die beiden doch schachteln, also nacheinander aufrufen? du mußt nur bei der rückgabe des ersten skalierten bildes den webpfad mit dem serverpfad ersetzen und das als inputbild für die zweite funktion verwenden
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

thx für den tipp, ich hätte sonst die funktion umgebaut...

mal sehen wie die bildqualität dann aussieht...
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

also bisher hatte ich damit keine Probleme, obwohl es 2x durch den JPG-Filter läuft

auf der dorma-seite kannst du ja die beispiele sehen, wenn sie 2x verkleinert wurden
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

da bin ich aber gleich auf noch nen bug genagelt...

function capiImgScaleHQ

findet sich

Code: Alles auswählen

imagecopy($targetImage, $imageHandle, 0, 0, 0, 0);
das führt aber zu einer netten fehlermeldung...

Warning: Wrong parameter count for imagecopy() in ...\contenido\includes\api\functions.api.images.php on line 282

korrekt wäre glaube ich

Code: Alles auswählen

imagecopy($targetImage, $imageHandle, 0, 0, 0, 0, $maxX, $maxY);
die fehlermeldung ist dann zwar weg, aber der thumb ist komplett schwarz... ?? shit
*** make your own tools (wishlist :: thx)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

das problem mit den schwarzen thumbs hat sich gelöst...
der explorer hatte ein problem mit dem bilder cache...
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

ich hab's mal nach bugs verschoben
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ähm jetzt noch ne kleine frage

wenn nun ein thumb erzeugt wird wäre es vielleicht eine nette
option die bildqualität mitangeben zu können...

bei imagemagik wird das ja gemacht

Code: Alles auswählen

exec ("convert -gravity center -quality 60 -crop {$maxX}x{$maxY}+1+1 \"$filename\" $cacheFile");
bei

Code: Alles auswählen

imagejpeg($targetImage, $cacheFile)
hingegen nicht...

der aufruf sieht momentan ja so aus

Code: Alles auswählen

function capiImgScale ($img, $maxX, $maxY, $crop = false, $expand = false, $cacheTime = 10, $wantHQ = false)
das $wantHQ wird momentan sowieso nicht verwendet...
anstelle dessen eventuell $quality=60 oder 80 setzen und in die weiteren funktionen übergeben...

gute oder blöde idee ?

ach ja warum das wichtig ist...
führt man die funktion zweimal hineinander aus
also zuerst crop und resize kommte es beim crop bereits zu einen unnötigen qualitätsverlust...
Zuletzt geändert von emergence am Fr 9. Sep 2005, 12:10, insgesamt 1-mal geändert.
*** make your own tools (wishlist :: thx)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

gleich nochwas gesehen...

Code: Alles auswählen

		case 'failure':
			$sql = "SELECT frontendpath, htmlpath FROM ".$cfg['tab']['clients']." WHERE idclient=$client";
			$db->query($sql);
			$db->next_record();
			$img = $db->f("htmlpath") . str_replace($db->f("frontendpath"),'',$img);
			$return = $img;
			break;
ersetzen durch

Code: Alles auswählen

		case 'failure':
			$return = str_replace($cfgClient[$client]["path"]["frontend"], $cfgClient[$client]["path"]["htmlpath"], $img);
			break;
ähm, sollte es auch tun...
$cfgClient muss ja zur verfügung stehen... ;-)
*** make your own tools (wishlist :: thx)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ähm ich hab da ein problem

folgender code

Code: Alles auswählen

	/* Create the target image with the target size, resize it afterwards. */
	$targetImage = imagecreatetruecolor($targetX, $targetY);

	if ($crop)
	{
		imagecopy($targetImage, $imageHandle, 0, 0, 0, 0, $maxX, $maxY);
	} else {
		imagecopyresampled($targetImage, $imageHandle, 0, 0, 0, 0, $targetX, $targetY, $x, $y);
	}
nur bei einem crop
das $targetImage wird auf $targetX, $targetY gesetzt...
muss aber auf $maxX, $maxY gesetzt werden...

so bekomme ich momentan keine exakt geschnitten thumbs...

korrigiert man es auf

Code: Alles auswählen

	if ($crop)
	{
		/* Create the target image with the max size, crop it afterwards. */
		$targetImage = imagecreate($maxX, $maxY);
		imagecopy($targetImage, $imageHandle, 0, 0, 0, 0, $maxX, $maxY);
	} else {
		/* Create the target image with the target size, resize it afterwards. */
		$targetImage = imagecreate($targetX, $targetY);
		imagecopyresized($targetImage, $imageHandle, 0, 0, 0, 0, $targetX, $targetY, $x, $y);
	}
und

Code: Alles auswählen

	if ($crop)
	{
		/* Create the target image with the max size, crop it afterwards. */
		$targetImage = imagecreatetruecolor($maxX, $maxY);
		imagecopy($targetImage, $imageHandle, 0, 0, 0, 0, $maxX, $maxY);
	} else {
		/* Create the target image with the target size, resize it afterwards. */
		$targetImage = imagecreatetruecolor($targetX, $targetY);
		imagecopyresampled($targetImage, $imageHandle, 0, 0, 0, 0, $targetX, $targetY, $x, $y);
	}
klappt das ganze problemlos...
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

emergence hat geschrieben:

Code: Alles auswählen

exec ("convert -gravity center -quality 60 -crop {$maxX}x{$maxY}+1+1 "$filename" $cacheFile");
bei

Code: Alles auswählen

imagejpeg($targetImage, $cacheFile)
hingegen nicht...
Naja, ich würde dann eher dazu übergehen, die ImageMagick-Qualität auf 75 zu setzen (entspricht in etwa dem, was PHP ohne Qualityangabe macht). Ich würde aber die Funktionen nicht weiter modifizieren, wir planen in Zukunft auch eine neue Bildmanipulationsklasse, die da etwas flexibler ist als die (starren) capiImage-Funktionen.
ach ja warum das wichtig ist...
führt man die funktion zweimal hineinander aus
also zuerst crop und resize kommte es beim crop bereits zu einen unnötigen qualitätsverlust...
Eigentlich müssten crop und resize in einem Schritt ohne Zwischenlagerung geschehen -> geht aber mit capiImageScale nicht recht, deshalb würde ich das mal offen lassen...
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

emergence hat geschrieben: nur bei einem crop
das $targetImage wird auf $targetX, $targetY gesetzt...
muss aber auf $maxX, $maxY gesetzt werden...

so bekomme ich momentan keine exakt geschnitten thumbs...
Habe ich eingebaut, und auch gleich die Quality-Änderung auf 75 gemacht.
#ayshe
Beiträge: 445
Registriert: Do 25. Mär 2004, 10:04
Kontaktdaten:

Beitrag von #ayshe »

emergence hat geschrieben:ähm ich hab da ein problem

folgender code

Code: Alles auswählen

	/* Create the target image with the target size, resize it afterwards. */
	$targetImage = imagecreatetruecolor($targetX, $targetY);

	if ($crop)
	{
		imagecopy($targetImage, $imageHandle, 0, 0, 0, 0, $maxX, $maxY);
	} else {
		imagecopyresampled($targetImage, $imageHandle, 0, 0, 0, 0, $targetX, $targetY, $x, $y);
	}
und zwischen Zeile 237 und 250 steht


nur bei einem crop
das $targetImage wird auf $targetX, $targetY gesetzt...
muss aber auf $maxX, $maxY gesetzt werden...

so bekomme ich momentan keine exakt geschnitten thumbs...

korrigiert man es auf

Code: Alles auswählen

	if ($crop)
	{
		/* Create the target image with the max size, crop it afterwards. */
		$targetImage = imagecreate($maxX, $maxY);
		imagecopy($targetImage, $imageHandle, 0, 0, 0, 0, $maxX, $maxY);
	} else {
		/* Create the target image with the target size, resize it afterwards. */
		$targetImage = imagecreate($targetX, $targetY);
		imagecopyresized($targetImage, $imageHandle, 0, 0, 0, 0, $targetX, $targetY, $x, $y);
	}
und

Code: Alles auswählen

	if ($crop)
	{
		/* Create the target image with the max size, crop it afterwards. */
		$targetImage = imagecreatetruecolor($maxX, $maxY);
		imagecopy($targetImage, $imageHandle, 0, 0, 0, 0, $maxX, $maxY);
	} else {
		/* Create the target image with the target size, resize it afterwards. */
		$targetImage = imagecreatetruecolor($targetX, $targetY);
		imagecopyresampled($targetImage, $imageHandle, 0, 0, 0, 0, $targetX, $targetY, $x, $y);
	}
klappt das ganze problemlos...
Also, ich hab in der Datei einmal so ungefähr zwischen Zeile 127 und 138 stehen

Code: Alles auswählen

/* Create the target image with the target size, resize it afterwards. */
	$targetImage = imagecreate($targetX, $targetY);

	if ($crop)
	{
		imagecopy($targetImage, $imageHandle, 0, 0, 0, 0);
	} else {
		imagecopyresized($targetImage, $imageHandle, 0, 0, 0, 0, $targetX, $targetY, $x, $y);
	}

	/* Output the file */
	imagepng($targetImage, $cacheFile);
Und in den Zeilen 237-250 steht:

Code: Alles auswählen

/* Create the target image with the target size, resize it afterwards. */
	$targetImage = imagecreatetruecolor($targetX, $targetY);

	if ($crop)
	{
		imagecopy($targetImage, $imageHandle, 0, 0, 0, 0);
	} else {
		imagecopyresampled($targetImage, $imageHandle, 0, 0, 0, 0, $targetX, $targetY, $x, $y);
	}

	/* Output the file */
	imagepng($targetImage, $cacheFile);

	return ($webFile);
Muss ich an beiden Stellen den Code ersetzen wie oben von emergence beschrieben? Oder ist die Datei in der Contenido-Version 4.4.5 sowieso noch ganz anders gestrickt.
Diese Fehlermeldungen im Dateiverzeichnis sind echt doof, die hätte ich gerne weg - deshalb frag ich nochmal.
Gesperrt