Opened 15 months ago

Closed 14 months ago

Last modified 5 months ago

#1600 closed Erweiterung (fixed)

Thumbnails schärfen, damit Details nicht untergehen

Reported by: p3e Owned by: somebody
Priority: normal Milestone: modified-shop-2.0.5.1
Component: Admin Version: 2.0.4.2

Description (last modified by Tomcraft)

Im Forum gibt es eine praktikable Lösung damit Details beim berechnen der Thumbnails nicht verloren gehen:

Bildqualität Thumbnails

Das ist sinnvoll, wenn es ein Produkt in verschiedenen Designs gibt. Ohne Nachschärfen der Thumbnails kann der Kunde bei manchen Produkten ohne die Erweiterung im der Listenansicht gar keinen Unterschied sehen. Beispiel: blaues Kleid uni und blaue Kleid mit kleinen weißen Punkten.

Ich würde gerne anregen, dass das in die neue Version mit aufgenommen wird.

Attachments (2)

image_sharpen.zip (10.0 KB) - added by Tomcraft 15 months ago.
changeset_12516.zip (4.8 KB) - added by Tomcraft 5 months ago.

Download all attachments as: .zip

Change History (16)

comment:1 Changed 15 months ago by p3e

Nachtrag: hier der direkte Link zur Codeerweiterung von Karsta: Bildqualität Thumbnails

Last edited 15 months ago by Tomcraft (previous) (diff)

comment:2 Changed 15 months ago by anonymous

Nachtrag 2: der Name ist natürlich Karsta und nicht Kasta (sorry und Asche auf mein Haupt).

comment:3 Changed 15 months ago by Tomcraft

Der Code kommt mir irgendwie bekannt vor, aber ich finde die angehängte Lösung von web28 irgendwie eleganter.

Soweit ich mich erinnere gab es da aber Einwände das nicht generell für alle zu übernehmen... Ich erinnere mich nur noch mehr dran wieso das nicht für jeden Sinn macht. Vielleicht fällt ja jemandem ein Einwand ein?

Changed 15 months ago by Tomcraft

comment:4 Changed 15 months ago by anonymous

Eleganter weil die Shärfe-Matrix in ein File ausgelagert wurde ?
Wenn editierbar dann gehört's imho wegen Update-Sicherheit gleich in's Backend.
Ansonsten kann ich einen Grund für ein Include anstelle des Codes direkt im File nicht sehen (was heißt denn "eleganter" ?). Jedes Include erhöht den Workload und macht PHP am Ende langsamer.

Welchen Grund es geben sollte, daß die Qualitätsverbesserung,
und als eine solche sehe ich das Schärfen der Bilder an,
nicht für jeden Sinn machen sollte ist mir schleierhaft.

Gruß,
noRiddle

comment:5 Changed 15 months ago by Tomcraft

  • Description modified (diff)

comment:6 Changed 14 months ago by GTB

  • Resolution set to fixed
  • Status changed from new to closed

In 11678:

fix #1600

comment:7 Changed 10 months ago by Tomcraft

In 12079:

fix #1600

comment:8 Changed 10 months ago by Tomcraft

Wir haben das umgestellt auf auto_include und schärfen nicht mehr standardmäßig, da das nicht immer den gewünschten Effekt bringt.

Eine mögliche "/admin/includes/extra/modules/image_sharpen/10_image_sharpen.php" sieht wie folgt aus:

<?php
  $sharpen_arr = array(
    // Image Enhance:
    // Source: http://designstacks.net/convolution-matrix
    array(0.0, -2.0, 0.0),
    array(-2.0, 20.0, -2.0),
    array(0.0, -2.0, 0.0) 
  );
  
  $offset = -40;
  $divisor = 10;
  
  if ($this->q > 1) $sharpen = true;
?>

Oder aber

<?php
  $sharpen_arr = array(
    // Default sharpen: https://www.php.net/manual/de/function.imageconvolution.php#104006
    array(-1.2, -1, -1.2),
    array(-1.0, 20, -1.0),
    array(-1.2, -1, -1.2) 
  );
  
  $offset = 0;
  //$divisor = 10;
  
  if ($this->q > 1) $sharpen = true;
?>

Weitere mögliche sharpen arrays:

    // Alternative sharpen: 
    // Source: https://www.bestwebframeworks.com/tutorials/php/5/sharp-images-with-gd/
    array(-1, -1,  -1),
    array(-1, 16, -1),
    array(-1, -1,  -1),
  
    // Alternative sharpen:
    // Source: http://www.roborealm.com/help/Convolution.php
    array(-1, -1,  -1),
    array(-1, 9, -1),
    array(-1, -1,  -1),
  
    // Alternative sharpen:
    // Source: http://adamhopkinson.co.uk/blog/2010/08/26/sharpen-an-image-using-php-and-gd/
    array(0.0, -1.0, 0.0),
    array(-1.0, 5.0, -1.0),
    array(0.0, -1.0, 0.0) 

comment:9 Changed 5 months ago by noRiddle

Warum habt Ihr in der 2.0.5.0 in /admin/includes/classes/image_manipulator_GD2_advanced.php zwar eine neue Methode sharpen() und dort ein auto_include() eingebaut, die Verwendung der Methode selbst aber ist in der Klasse auskommentiert ?
Vergessen, oder geplantes Feature, oder raff ich nix ?

Gruß,
noRiddle

comment:10 Changed 5 months ago by Tomcraft

Die Antwort darauf steht doch genau ein Kommentar weiter oben.

comment:11 Changed 5 months ago by noRiddle

Inwiefern ?, ich hab' schon alles gelesen.
Ich sage es nochmals, die Methode wird in der Klasse nicht verwendet.
Oder du sagst mir wo ?
Wir reden ja nicht vom Filemaneger sondern vom Imageprozessor.

Gruß,
noRiddle

comment:12 Changed 5 months ago by Tomcraft

Jetzt sehe ich was du meinst. Die Verwendung der Methode wurde wohl sogar von mir in r12079 auskommentiert. Ich kann mich da aber beim besten Willen nicht dran erinnern die Datei derart bereinigt zu haben.
Das schauen wir uns nochmal an!

Weitere mögliche Schärfungs-Presets aus der "/admin/includes/modules/filemanager/include/php_image_magician.php" (Der Responsive FileManager? scheint beim Upload auch automatisch nachzuschärfen):

## --------------------------------------------------------

	private function sharpen()
		# Author:     Jarrod Oberto
		# Date:       08 04 2011
		# Purpose:    Sharpen image
		# Param in:   n/a
		# Param out:  n/a
		# Reference:
		# Notes:
		# Credit:   Incorporates Joe Lencioni (August 6, 2008) code
	{

		if (version_compare(PHP_VERSION, '5.1.0') >= 0)
		{

			// ***
			if ($this->aggresiveSharpening)
			{ # A more aggressive sharpening solution

				$sharpenMatrix = array( array( -1, -1, -1 ),
										array( -1, 16, -1 ),
										array( -1, -1, -1 ) );
				$divisor = 8;
				$offset = 0;

				imageconvolution($this->imageResized, $sharpenMatrix, $divisor, $offset);
			}
			else # More subtle and personally more desirable
			{
				$sharpness = $this->findSharp($this->widthOriginal, $this->width);

				$sharpenMatrix = array(
					array( -1, -2, -1 ),
					array( -2, $sharpness + 12, -2 ), //Lessen the effect of a filter by increasing the value in the center cell
					array( -1, -2, -1 )
				);
				$divisor = $sharpness; // adjusts brightness
				$offset = 0;
				imageconvolution($this->imageResized, $sharpenMatrix, $divisor, $offset);
			}
		}
		else
		{
			if ($this->debug)
			{
				throw new Exception('Sharpening required PHP 5.1.0 or greater.');
			}
		}
	}

## --------------------------------------------------------

	private function findSharp($orig, $final)
		# Author:     Ryan Rud (http://adryrun.com)
		# Purpose:    Find optimal sharpness
		# Param in:   n/a
		# Param out:  n/a
		# Reference:
		# Notes:
		#
	{
		$final = $final * (750.0 / $orig);
		$a = 52;
		$b = -0.27810650887573124;
		$c = .00047337278106508946;

		$result = $a + $b * $final + $c * $final * $final;

		return max(round($result), 0);
	}

comment:13 Changed 5 months ago by Tomcraft

  • Milestone changed from modified-shop-2.0.5.0 to modified-shop-2.0.5.1

comment:14 Changed 5 months ago by GTB

In 12516:

fix #1600 - enable sharpen function to work only with auto_include

Changed 5 months ago by Tomcraft

Add Comment

Modify Ticket

Action
as closed
The resolution will be deleted. Next status will be 'reopened'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.