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 02-10-2009, 12:46
someRookie
 Registrierter Benutzer
Links : Onlinestatus : someRookie ist offline
Registriert seit: Oct 2009
Beiträge: 50
someRookie befindet sich auf einem aufstrebenden Ast
Standard Farbe bildpunkte in transparenter Grafik

hi ihr,

bin neu hier und hoffe auch gleich mal eine frage stellen zu dürfen ?

Gibt es die möglichkeit jegliche farbigen Bildpunkte innerhalb einer transparenten Grafik zu bestimmten ?

Egal in welcher Einheit, also z.B Pixelanzahl oder Prozentangabe ?

oder hat jemand eventuell eine Idee wie ich sowas releasieren könnte?

Gruss
Rene
Mit Zitat antworten
  #2 (permalink)  
Alt 02-10-2009, 12:53
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo Rene,

dazu muss man das Bild zeilenweise abtasten und mit imagecolorat die Pixelfarbe bzw. den Paletteneintrag ermitteln.

Gruß,

Amica
Mit Zitat antworten
  #3 (permalink)  
Alt 02-10-2009, 13:22
someRookie
 Registrierter Benutzer
Links : Onlinestatus : someRookie ist offline
Registriert seit: Oct 2009
Beiträge: 50
someRookie befindet sich auf einem aufstrebenden Ast
Standard

Hallo Amica,

dieser Vorschlag liest sich ja schon mal total klasse.
Ich weiß zwar noch nicht, wie ich zeilenweise ein Bild abtaste, aber da wird mir ja google vielleicht behiflich sein können.

imagecolorat hab ich mir aber sofort durchgelesen und das arbeitet ja genau wie gewünscht, tastet pixel ab und nennt mir den farbwert.
also probiert ich erst mal aus, was mir imagecolorat für ein wert ausgibt, wenn er auf ein transparentes pixel trifft... hoffentlich nicht den wert für weiss, denn das gehört mit zu den farbigen pixel.

Aber wenns gut funktioniert könnte ich alle transparenten pixel zählen und zu der anzahl aller pixel im bild ins Verhältnis setzen und erhalte dann ein prozentwert... oh wäre das super.

Danke schonmal für diesen anschubser !
Mit Zitat antworten
  #4 (permalink)  
Alt 02-10-2009, 13:26
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von someRookie Beitrag anzeigen
Ich weiß zwar noch nicht, wie ich zeilenweise ein Bild abtaste
Mit einer Schleife für y und darin einer weiteren Schleife für x.
Mit Zitat antworten
  #5 (permalink)  
Alt 02-10-2009, 13:55
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von someRookie Beitrag anzeigen
Ich weiß zwar noch nicht, wie ich zeilenweise ein Bild abtaste, aber da wird mir ja google vielleicht behiflich sein können.
Jaja, heutzutage geht ohne Google anscheinend nichts mehr ...

Zitat:
Aber wenns gut funktioniert könnte ich alle transparenten pixel zählen ...
PHP-Code:
$w ImageSX($img);
$h ImageSY($img);
for (
$y 0$y $h; ++$y) {
  for (
$x 0$x $w; ++$x) {
    
//nur fuer TrueColour-Images!
    
$argb imageColorAt($img$x$y); // true-colour RGB + alpha
    
$rgb 0xffffff $argb// true-colour RGB
    
$alpha = (0xff000000 $argb) >> 24;
    
$alpha = ($alpha <= 127) ? $alpha 0;
    
// alle Pixel mit $alpha !== 0 sind transparent

    // ...
    // zählen
    // ...
  
}

Wie du siehst, geht das ganz einfach. Leider ist diese Methode auch nicht gerade besonders schnell.

Der Rest ist Prozentrechnung ...

Geändert von fireweasel (02-10-2009 um 14:22 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 02-10-2009, 13:55
someRookie
 Registrierter Benutzer
Links : Onlinestatus : someRookie ist offline
Registriert seit: Oct 2009
Beiträge: 50
someRookie befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Mit einer Schleife für y und darin einer weiteren Schleife für x.

auweia ja !

Dankeschön !
Mit Zitat antworten
  #7 (permalink)  
Alt 02-10-2009, 14:04
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von fireweasel Beitrag anzeigen
Code:
    $argb = $imageColorAt($img, $x, $y); // true-colour RGB + alpha
Dort muss natürlich das Dollarzeichen weg.
Mit Zitat antworten
  #8 (permalink)  
Alt 02-10-2009, 14:11
someRookie
 Registrierter Benutzer
Links : Onlinestatus : someRookie ist offline
Registriert seit: Oct 2009
Beiträge: 50
someRookie befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von fireweasel Beitrag anzeigen
Jaja, heutzutage geht ohne Google anscheinend nichts mehr ...



PHP-Code:
.. 
Wie du siehst, geht das ganz einfach. Leider ist diese Methode auch nicht gerade besonders schnell.

Der Rest ist Prozentrechnung ...
uppss... das is ja ne ganze Lösung
war schon dabei zu tüfteln, was die RGB´s für werte haben usw und nu lese ich hier gleich ne ganze Antwort *erfreutbin*

die Geschwindigkeit ist nicht ganz so wichtig, dieser vorgang wird eigentlich nur alle 15 minuten einmal durchgeführt.
Mit Zitat antworten
  #9 (permalink)  
Alt 02-10-2009, 14:25
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Dort muss natürlich das Dollarzeichen weg.
Yep, wird sofort entfernt, Meister|Mistress!

Ich hadere noch mit einer (für mich) neuen Tastatur und geändertem Tastaturlayout, da bin ich schon froh, dass man überhaupt noch erkennt, was ich ursprünglich tippen wollte ...
Mit Zitat antworten
  #10 (permalink)  
Alt 02-10-2009, 15:15
someRookie
 Registrierter Benutzer
Links : Onlinestatus : someRookie ist offline
Registriert seit: Oct 2009
Beiträge: 50
someRookie befindet sich auf einem aufstrebenden Ast
Standard

Hallo fireweasel,

ich hab das ganze mal ausprobiert und hoffentlich dein $alpha!==0 richtig umgesetzt, allerdings stimm mein Ergebnis nicht

Entweder stimmt was an meinem Grafikformat nicht oder mein script selbst hat ein Fehler !?

ich hab die zugrundeligende Grafik mal geöffnet und es besitzt ein Transprarenten Hintergrund, daher denke ich mal, dass mein script irgendwo falsch abläuft.. kann das sein ?

liegt das eventuell daran, wie ich das bild mit imagecreatefromgif() öffne ?


PHP-Code:
$alphaPixel   0;
$coloredPixel 0;
$img imagecreatefromgif 'images/pic.gif' );

$w imagesx($img);
$h imagesy($img);
for (
$y 0$y $h; ++$y
{
  for (
$x 0$x $w; ++$x
  {
    
//nur fuer TrueColour-Images!
    
$argb  imagecolorat($img$x$y); // true-colour RGB + alpha
    
$rgb   0xffffff $argb// true-colour RGB
    
$alpha = (0xff000000 $argb) >> 24;
    
$alpha = ($alpha <= 127) ? $alpha 0;
    
// alle Pixel mit $alpha !== 0 sind transparent
    
if($alpha!==0)
    {
        
$alphaPixel++;
    }
    else
    {
        
$coloredPixel++;    
    }
    
#echo $alpha."<br>";
    // ...
    // zählen
    // ...
  
}

echo 
"Alle Pixel: ".($alphaPixel+$coloredPixel)."<br>";
echo 
"Transparente Pixel = ".$alphaPixel."<br>";
echo 
"Farbige Pixel: ".$coloredPixel."<br>";

// Ausgabe 
// Alle Pixel: 250390
// Transparente Pixel: 0
// Farbige Pixel: 250390 
Mit Zitat antworten
  #11 (permalink)  
Alt 02-10-2009, 15:25
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von someRookie Beitrag anzeigen
liegt das eventuell daran, wie ich das bild mit imagecreatefromgif() öffne ?
Ja, fireweasel wies bereits darauf hin, dass das nur für TrueColor funktioniert. Für indizierte Bilder musst du es zusätzlich mit imagecolorsforindex($img, imagecolortransparent($img)) abgleichen.

Geändert von AmicaNoctis (02-10-2009 um 15:41 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 02-10-2009, 15:39
someRookie
 Registrierter Benutzer
Links : Onlinestatus : someRookie ist offline
Registriert seit: Oct 2009
Beiträge: 50
someRookie befindet sich auf einem aufstrebenden Ast
Standard

oh wow... da muss ich wohl ganz klar noch Büffeln, damit ich die Antwort überhaupt erst einmal verstehe
Mit Zitat antworten
  #13 (permalink)  
Alt 02-10-2009, 15:46
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Ein paar Fragen, um das Büffeln zu beschleunigen: Weißt du, was der Unterschied zwischen indiziert und TrueColor ist? Weißt du, was eine Farbpalette ist? Weißt du, was der Unterschied zwischen Alphatransparenz und Indextransparenz ist? Soll die Lösung nur für GIF funktionieren oder auch für JPEG, PNG, ...?
Mit Zitat antworten
  #14 (permalink)  
Alt 02-10-2009, 16:01
someRookie
 Registrierter Benutzer
Links : Onlinestatus : someRookie ist offline
Registriert seit: Oct 2009
Beiträge: 50
someRookie befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Ein paar Fragen, um das Büffeln zu beschleunigen: Weißt du, was der Unterschied zwischen indiziert und TrueColor ist? Weißt du, was eine Farbpalette ist? Weißt du, was der Unterschied zwischen Alphatransparenz und Indextransparenz ist? Soll die Lösung nur für GIF funktionieren oder auch für JPEG, PNG, ...?
Unterschied inidziert- TrueColor : Nein
Farbpalette : ja, das sind alle enthaltenen bzw alle möglichen Farben
Alpha/index : Bruchstückhaft ? alphatransparenz stell in GIf keine wirkliche transparenz dar, sondern die indextransparenz ?

Die Lösung soll nur für GIF funktionieren !
Mit Zitat antworten
  #15 (permalink)  
Alt 02-10-2009, 16:14
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von someRookie Beitrag anzeigen
Die Lösung soll nur für GIF funktionieren !
In GIF haben die einzelnen Pixel keine Farbe sondern einen Index. Außerdem enthält ein GIF eine Farbpalette. Das ist eine Tabelle, in der für jeden solchen Index die Farbe gespeichert ist. Ändert man einen Eintrag in dieser Palette, ändert sich automatisch die Farbe aller Pixel, die auf diesen Eintrag zeigen.

Indextransparenz ist in GIF so gelöst, dass ein Index (also ein Paletteneintrag) als transparent definiert wird.

imagecolortransparent($img) gibt dir diesen Index zurück, der im Bild als transparent definiert ist und den speicherst du, z. B. in $transIndex.

imagecolorat liefert für indizierte Bilder nicht die Farbe zurück, sondern den Index. Den musst du nur mit $transIndex vergleichen.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
farbige bildpunkte


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[GD] Text Farbe ist Transparent anstatt Farbe Laire PHP Developer Forum 14 05-06-2008 18:42
vordergrund farbe umkehren je nach hintergrund farbe frank7l7 PHP Developer Forum 2 20-05-2005 13:16
transparenter hintergrund? seered HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 4 04-02-2005 17:27
transparenter hintergrund kkcc-ghost HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 13 26-12-2002 15:42
transparenter Hintergrund JoelH PHP Developer Forum 1 20-08-2001 18:04

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

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

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


 

Aktuelle PHP Scripte

HeidiSQL - kostenloses MySQL front-end Editor für Windows ansehen HeidiSQL - kostenloses MySQL front-end Editor für Windows

HeidiSQL - ist ein Windows-Editor für die bekannt open Source Datenbank mySQL

10.12.2018 Berni | Kategorie: MYSQL/ Management
piwik Open-Source Webanalyse-Software ansehen piwik Open-Source Webanalyse-Software

piwik ist eine gute Alternative zu Google Analytics. Viele Features und ein modernes Erscheinungsbild mit aussagefähigen Statistiken in Echtzeit

10.12.2018 phpler | Kategorie: PHP/ Besucherzaehler
jQuery Mobile ansehen jQuery Mobile

Touch-Optimized Web Framework für Smartphones & Tablets

09.12.2018 phpler | Kategorie: AJAX/ Framework
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:56 Uhr.