php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 23-10-2007, 16:22
DuRoX
 Registrierter Benutzer
Links : Onlinestatus : DuRoX ist offline
Registriert seit: Nov 2002
Beiträge: 89
DuRoX ist zur Zeit noch ein unbeschriebenes Blatt
Standard [PHP5] "Schwarzanteil" eines Bilds berechnen

Hallo zusammen,

ich habe nach längerer Aufbauphase eine Plattform programmiert, die Fotos von Veranstaltungen der breiten Masse zur Verfügung stellt. Nun kommt es oftmals vor, dass User zu faul sind, Bilder die zu 90% aus schwarzem Hintergrund bestehen, auszusortieren und nicht hochzuladen. (z.B. Foto in der Nacht und nur ein Gesicht ist beleuchted, sonst total Schwarz)

Ich habe überlegt, ob es mit PHP möglich wäre ein Bild dahingehend zu untersuchen, ob es mit sinnvollerem Inhalt befüllt ist, als mit Schwarz. Sollte der "Schwarz-Anteil" zu hoch sein, wird das Bild verworfen.
Leider habe ich weder Kenntnisse in der Farbenlehre noch die geringste Ahnung wie man soetwas realisieren könnte - und das allerwichtigste: ich weiß nicht, ob solch eine Untersuchung nicht zu performancelastig wäre. Denn ich verarbeite mit einem Aufruf gern auch mal mehrere hundert MB Bilddaten und bin jedes Mal von neuem erstaunt, dass PHP noch damit umgehen kann

Hat jemand eine Idee zu solch einer Problemstellung?

Grüße
DuRoX
Mit Zitat antworten
  #2 (permalink)  
Alt 23-10-2007, 16:29
xkl1986
 Member
Links : Onlinestatus : xkl1986 ist offline
Registriert seit: May 2007
Ort: NRW
Beiträge: 215
xkl1986 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wen du keine Ahnung von Farbe hast und dir angst um die Performance machst, lass es einfach bleiben.
__________________
"Nicht jeder Mensch kann und soll Programmieren[...]".
Mit Zitat antworten
  #3 (permalink)  
Alt 23-10-2007, 16:58
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
function computeAvgRGB(){
  
$res imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT'].
'/path/to/pics/pic.jpg');
  
$width imagesx($res);
  
$height imagesy($res);
  
$r 0;
  
$g 0;
  
$b 0;
  for(
$y=1;$y<$height;$y++){
    for(
$w=1;$w<$width;$w++){
      
$rgb imagecolorat($res$w$y);
      
$r += ($rgb >> 16) & 0xFF;
      
$g += ($rgb >> 8) & 0xFF;
      
$b += $rgb 0xFF;
    }
  }
  
$r round($r/($width*$height));
  
$g round($g/($width*$height));
  
$b round($b/($width*$height));
  return array(
$r,$g,$b);

So erhälst du ein Array mit den durchschnittlichen Rot, Grün und Blau Werten. Wenn diese Werte über deinem Schwellenwert liegen, knickst du das Bild

Gruss
tobi
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #4 (permalink)  
Alt 23-10-2007, 17:09
Postaria
 Registrierter Benutzer
Links : Onlinestatus : Postaria ist offline
Registriert seit: Mar 2004
Beiträge: 100
Postaria ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hmm ich ich denke mal wenn er jetzt schon probleme mit der Performance hat dann wird die funktion von jahlives glaube umhauen..
denn du machst ja ein neues img von dem hochgeladenen jpeg.

Zugegeben ich wüsste jetzt auch keine bessere möglichkeit.

Aber eventuell schaust du dir mal die Funktionen imagecolorallocate()
mal genauer an.
könnte dir eventuell helfen.

ansonsten :
@ xkl1986 : also wie ich diese kommentare zu kneifen versuche.
Probier mal das nächste mal etwas gescheites von deiner Tastatur zu übergeben.
Mit Zitat antworten
  #5 (permalink)  
Alt 23-10-2007, 17:17
ZombieChe
 Member
Links : Onlinestatus : ZombieChe ist offline
Registriert seit: Apr 2004
Ort: Hannover
Beiträge: 225
ZombieChe ist zur Zeit noch ein unbeschriebenes Blatt
ZombieChe eine Nachricht über ICQ schicken
Standard

imagecolorallocate legt eine Farbe fest, glaube nicht, dass ihm das was bringt. So oder so muss das Bild geladen werden und sowas zu analysieren ist nunmal rechenintensiv.
Ich geb mal zu beachten, dass pro Megapixel/Bild 1Mio Schleifendurchgänge gemacht werden. Bei >100MB kann das schon heftig werden, aber am besten testest du den Code einfach mal auf seine Zeit und schaust dann, wie viel da drin ist...
Mit Zitat antworten
  #6 (permalink)  
Alt 23-10-2007, 17:44
DuRoX
 Registrierter Benutzer
Links : Onlinestatus : DuRoX ist offline
Registriert seit: Nov 2002
Beiträge: 89
DuRoX ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo,
vielen Dank für eure Antworten.

@jahlives:
danke für die Funktion. Ich habe diese auf meiner lokalen Testumgebung implementiert, da ich zum Resizen bereits schon ein neues Bild erstelle. Dann habe ich mir eine kleine Benchmarkklasse geschrieben und leider festgestellt, dass die Ausführungszeit auf meinem alten Rechner (XP2100+) bei einem 1600x1200px EOS Bild durchschnittlich bei ca. 5-10 Sekunden (100% CPU Load) liegt. Beim Abarbeiten von ca. 1000 Bildern (wie es jetzt der Fall ist), wären das nochmal 2,7 Stunden nur für das Aussortieren der schwarzen Bilder.
Echt schade. Ich hatte mir erhofft, dass PHP hier eine performance optimierte Funktion für solch eine Aufgabe anbietet.

Falls es jemanden interessiert, hier die Ausgabe von jahlives Funktion bei einem potentiell auszusortierenden Bild:

PHP-Code:
Array ( [0] => 22 [1] => 17 [2] => 14 )
Ausführungszeit7.652 Sekunden 
Viele Grüße
DuRoX
Mit Zitat antworten
  #7 (permalink)  
Alt 23-10-2007, 18:07
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du kannst die Zeit wesentlich drücken wenn du bestimmte Pixel überspringst oder das Bild z.B. auf 100x100 Pixel verkleinerst. Das sollte für eine solche Analyse normalerweise ausreichen.
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
  #8 (permalink)  
Alt 23-10-2007, 21:32
DuRoX
 Registrierter Benutzer
Links : Onlinestatus : DuRoX ist offline
Registriert seit: Nov 2002
Beiträge: 89
DuRoX ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo tontechniker,
danke für den Tip, jetzt hat sich die Ausführungszeit bei 100x100px auf annehmbare 0,12 Sekunden verkürzt.
Bleibt jetzt nur noch die Frage nach der richtigen Festlegung des Schwellenwerts und was ich genau mit den drei Array Werten machen muss. Mir ist aufgefallen, dass bei dieser Verkleinerung lediglich der dritte Wert nicht Null ist. Blau ist aber nicht schwarz?!
Bin etwas ratlos.

Grüße
DuRoX
Mit Zitat antworten
  #9 (permalink)  
Alt 23-10-2007, 21:54
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

Hmm, ich würde sagen: Einfach ausprobieren!
Eine perfekte null wirst Du nie bekommen. Es geht um Schwellenwerte, die Du am allerbesten mit einem manuellen Vergleich der maschinellen Analyse rausfindest.
Mit Zitat antworten
  #10 (permalink)  
Alt 23-10-2007, 22:12
DuRoX
 Registrierter Benutzer
Links : Onlinestatus : DuRoX ist offline
Registriert seit: Nov 2002
Beiträge: 89
DuRoX ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Alles klar, kannst du mir den "manuellen Vergleich der machinellen Analyse" mal etwas pragmatisch näher bringen? Google lieferte leider nur Müll..
Mit Zitat antworten
  #11 (permalink)  
Alt 23-10-2007, 22:16
pekka
 PHP Master
Links : Onlinestatus : pekka ist offline
Registriert seit: Jun 2001
Ort: Köln
Beiträge: 6.608
pekka befindet sich auf einem aufstrebenden Ast
Standard

Na, Bilder + Durchschnitts-RGB nebeneinander anzeigen lassen und beurteilen, ob die Bilder schwarz sind oder nicht! Dann zeigen sich Gesetzmäßigkeiten.
Mit Zitat antworten
  #12 (permalink)  
Alt 23-10-2007, 23:14
xkl1986
 Member
Links : Onlinestatus : xkl1986 ist offline
Registriert seit: May 2007
Ort: NRW
Beiträge: 215
xkl1986 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich weiß ja net wie viele Bilder da so pro tag hochgeladen werden, aber so etwas in einer "Lahmen" Interpretersprache zu machenist schon ein graus
__________________
"Nicht jeder Mensch kann und soll Programmieren[...]".
Mit Zitat antworten
  #13 (permalink)  
Alt 24-10-2007, 08:59
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Du suchst dir ein paar Bilder, welche du aussortieren möchtest und lässt dir den berechneten Schwarzwert dieser ausgeben.
Dann suchst du dir noch ein paar recht dunkle Bilder, welche du nicht aussortieren würdest. Aus diesen Werten musst du einen guten Mittelwert wählen, so dass die schwarzen Bilder weggeworfen werden, die dunklen Bilder aber noch über dem Wert liegen!
Mit Zitat antworten
  #14 (permalink)  
Alt 24-10-2007, 09:07
eintrachtemil
 Registrierter Benutzer
Links : Onlinestatus : eintrachtemil ist offline
Registriert seit: May 2004
Beiträge: 223
eintrachtemil ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Eventuell könnte dir auch ImageMagick bei deinem Problem helfen. Über identify müsste das ganze auch zu lösen sein.

Eventuell bringt dir das auch von der Performance her was. Kannst du ja mal ausprobieren.

Zitat:
ich weiß ja net wie viele Bilder da so pro tag hochgeladen werden,
ich weiß ja net ob du lesen kannst - aber das wurde bereits desöfteren hier geschrieben...
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:15 Uhr.