Modify

Opened 7 years ago

Closed 7 years ago

Last modified 5 years 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.6.0
Component: Admin Version: 2.0.4.2
Keywords: Cc:
Blocked By: Blocking:

Description (last modified by Torsten Riemer)

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 Torsten Riemer 7 years ago.
changeset_12516.zip (4.8 KB ) - added by Torsten Riemer 6 years ago.

Download all attachments as: .zip

Change History (20)

comment:1 by p3e, 7 years ago

Nachtrag: hier der direkte Link zur Codeerweiterung von Kasta:
https://www.modified-shop.org/forum/index.php?topic=37084.msg337385#msg337385

Version 0, edited 7 years ago by p3e (next)

comment:2 by anonymous, 7 years ago

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

comment:3 by Torsten Riemer, 7 years ago

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?

by Torsten Riemer, 7 years ago

Attachment: image_sharpen.zip added

comment:4 by anonymous, 7 years ago

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 by Torsten Riemer, 7 years ago

Description: modified (diff)

comment:6 by Gerhard Waldemair, 7 years ago

Resolution: fixed
Status: newclosed

In 11678:

fix #1600

comment:7 by Torsten Riemer, 6 years ago

In 12079:

fix #1600

comment:8 by Torsten Riemer, 6 years ago

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 by noRiddle, 6 years ago

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 by Torsten Riemer, 6 years ago

Die Antwort darauf steht doch genau ein Kommentar weiter oben.

comment:11 by noRiddle, 6 years ago

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 by Torsten Riemer, 6 years ago

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 by Torsten Riemer, 6 years ago

Milestone: modified-shop-2.0.5.0modified-shop-2.0.5.1

comment:14 by Gerhard Waldemair, 6 years ago

In 12516:

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

by Torsten Riemer, 6 years ago

Attachment: changeset_12516.zip added

comment:15 by FräuleinGarn, 5 years ago

Ich würde den Kommentar in /admin/includes/classes/image_manipulator_GD2_advanced.php

ändern von

/*
       * example
       *
      $sharpen_arr = array(
        array(-1.2, -1, -1.2),
        array(-1.0, 20, -1.0),
        array(-1.2, -1, -1.2) 
      );

      // calculate the sharpen divisor
      $divisor = array_sum(array_map('array_sum', $sharpen_arr));
      
      $offest = 0;
      */

zu

/*
       * example - put a file named 10_image_sharpen.php in /admin/includes/extra/modules/image_sharpen with code like this to sharpen images smaller than 400px
       *
      <?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) 
  );
  
  // calculate the sharpen divisor
  $divisor = array_sum(array_map('array_sum', $sharpen_arr));
  
  $offset = 0;
  
  if ($this->q < 400) $sharpen = true;
?>
*/

Das würde es verständlicher machen, da man auch annehmen könnte die Änderungen direkt in der /admin/includes/classes/image_manipulator_GD2_advanced.php vorzunehmen.

comment:16 by FräuleinGarn, 5 years ago

Und es fehlen im Bsp die Php-Tags sowie eine Zeile die $sharpen = true setzt wie zb

if ($this->q < 400) $sharpen = true;

Das werden Normaluser nicht hinbekommen, die die Bsp Codes aus dem Ticket nicht kennen.

comment:17 by Torsten Riemer, 5 years ago

In 12864:

fix #1600 - add example for image sharpen

comment:18 by Torsten Riemer, 5 years ago

Milestone: modified-shop-2.0.5.1modified-shop-2.0.5.2

Modify Ticket

Action
as closed The owner will remain somebody.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.