Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: XMMS:n kappaleinfo PNG:nä

Firsti [22.06.2005 23:18:20]

#

Eli tämä skripti on ensimmäinen vähän parempi PHP-skriptini ja tässä on ideana se että se tekee Linuxin XMMS soittimella soitettavasta kappaleesta infot PNG tiedostoon.

XMMS tarvii InfoPipen >=1.3 pluginnin... Ja sen pitää pistää infotiedostot /tmp/ hakemistoon.

Koodiin on myös pistetty sellainen että voi vaihtaa tekstin ja taustan väriä.
Eli muodossa esim 128 255 125, ja sama tekstille.
Eli jos tiedoston nimeksi pistetään np.php ja halutaan musta tausta ja valkoinen teksti pistetään osoitteeksi:
np.php?1=0&2=0&3=0&4=255&5=255&6=255
Ensimmmäiset 1, 2 ja 3 on taustan värit ja 4, 5 ja 6 on tekstin värit.

Eli koodi kertoo kappaleen tittelin ja artistin sekä pituuden ja frequencyn että bitraten ja vielä näiden lisäksi montako kappaletta playlistissä on.

np.php

<?php
$np = file("/tmp/xmms-info");
if ($np[0] != "") { $eka = $_GET['1']; $toka = $_GET['2']; $kolmas = $_GET['3']; $neljas = $_GET['4']; $viides = $_GET['5']; $kuudes = $_GET['6']; $im = imagecreate(680, 80); $bg = imagecolorallocate($im, $eka, $toka, $kolmas); $textcolor = imagecolorallocate($im, $neljas, $viides, $kuudes); $title = substr(substr($np[12], 0, strlen($np[12]) - 1),7); $samping = substr($np[10], 0, strlen($np[10]) - 1); $bitrate = substr($np[9], 0, strlen($np[9]) - 1); $pituus = substr(substr($np[8], 6), 0, strlen(substr($np[8], 6)) - 1); $kohta = substr(substr($np[6], 10), 0, strlen(substr($np[6], 10)) - 1); $kohtakaks = substr(substr($np[5], 14), 0, strlen(substr($np[5], 14)) - 1); $pituuskaks = substr(substr($np[7], 10), 0, strlen(substr($np[7], 10)) - 1); $prosentti = $kohtakaks / $pituuskaks * 100; $time = "Position: " . $kohta . "/" . $pituus; $tunes = substr($np[3], 0, strlen($np[3]) - 1); imagestring($im, 5, 20, 0, "XMMS:", $textcolor); imagestring($im, 4, 70, 0, $title, $textcolor); imagestring($im, 2, 10, 20, $time . " (" . round($prosentti, 1) . "%)", $textcolor); imagestring($im, 2, 10, 30, $samping, $textcolor); imagestring($im, 2, 10, 40, $bitrate, $textcolor); imagestring($im, 2, 10, 60, $tunes, $textcolor); header("Content-type: image/jpeg"); imagejpeg($im); }
?>

Firsti [22.06.2005 23:19:09]

#

Se olikin näköjään JPG :D

pwc [23.06.2005 13:33:25]

#

mitä ihmettä, ei yhtään ainoata rivinvaihtoa. Hajoaako jokin vai eikö ole yhtään järkeä tekijällä?

tkr7 [06.07.2005 17:38:27]

#

Siistin vähän tuota koodia. En kyllä oikein tiennyt kaikkien tietojen merkitystä muuttujanimien perusteella, mutta ainakin koodista lähti paljon epäselkeyttävää turhaa tavaraa pois ja lähtisi varmaan enemmänkin, jos saisi varmistuksen sille, että nuo substr( $str, 0, -1 ) (jotka oli merkitty vieläkin pidemmästi) tosiaan tarkoittavat vain sitä rtrim-funktion suoraan tekemää tilannetta, jossa merkkijonosta $str parsitaan tyhjät merkit pois sen lopusta. Koska XMMS on linuxin soitto-ohjelma olettaisin tämän parsittavan merkin olevan "\n", mutta miellellään saisi tekijä itse kommentoida koodinsa.

<?php

// Käydään tiedoston sisältö:
$npFile = file("/tmp/xmms-info");

// Jos tiedoston ensimmäinen rivi ei ole tyhjä:
if ($np[0] != "") {
	// Luodaan 680x80 kokoinen kuva:
	$im = imagecreate(680, 80);

	// Luodaan taustan väri tiedoston ensimmäisten rivien väritiedoista
	$bg = imagecolorallocate($im, $npFile[ 1 ], $npFile[ 2 ], $npFile[ 3 ] );

	// Lodaan tekstin väri tiedoston seuraavien rivien väritiedoista:
	$textcolor = imagecolorallocate($im, $npFile[ 4 ], $npFile[ 5 ], $npFile[ 6 ]);

	// Kirjoitetaan kuvaan sen pääotsake (ilmeisesti):
	imagestring($im, 5, 20, 0, "XMMS:", $textcolor);

	// Luetaan otsikkotieto tiedoston riviltä 12:
	$titleRow = substr( $npFile[ 12 ], 0, -1); // ei vikaa merkkiä (ilmeisesti sama kuin rtrim, eli \n pois)
	$title = substr( $titleRow, 7); // Otsikko on merkistä 7 eteenpäin.
	// ja kirjoitetaan se kuvaan:
	imagestring($im, 4, 70, 0, $title, $textcolor);

	// Käydään rivin 10 tieto:
	$samping = substr( $npFile[ 10 ], 0, -1); // ilmeisesti sama kuin rtrim( $npFile[ 10 ] )
	imagestring($im, 2, 10, 30, $samping, $textcolor); // ja kirjoitetaan kuvaan.

	// Bitrate tieto riviltä 9.
	$bitrate = substr($np[ 9 ], 0, -1);
	imagestring($im, 2, 10, 40, $bitrate, $textcolor); // ja kirjoitetaan se kuvaan.

	// Pituus-tieto rivin 8 merkitsä 7 alkaen:
	$pituus = substr( $npFile[ 8 ], 6, -1);

	// Kohta-tieto riviltä 6 merkistä 10 eteenpäin:
	$kohta = substr( $npFile[ 6 ], 10, -1);

	// Joku muu kohta-tieto riviltä 5 merkistä 14 eteenpäin:
	$kohtakaks = substr( $npFile[ 5 ], 14, -1);

	// Joku muu pituus-tieto riviltä 7, merkistä 10 eteenpäin:
	$pituuskaks = substr( $npFile[ 7 ], 10, -1 );

	// Lasketaan, kuinka monta prosenttia joku kohta-tieto on jostain pituustiedosta:
	$prosentti = $kohtakaks / $pituuskaks * 100;

	// Käydään tunes-tieto ja kirjoitetaan se kuvaaan:
	$tunes = substr( $npFile[ 3 ], 0, -1); // luultavasti sama kuin rtrim.
	imagestring($im, 2, 10, 60, $tunes, $textcolor);

	// Kirjoitetaan kuvaan, missä kohdassa ollaan:
	$time = "Position: " . $kohta . "/" . $pituus;
	imagestring($im, 2, 10, 20, $time . " (" . round($prosentti, 1) . "%)", $textcolor);

	// Lähetetään header-tieto sisällön tyypistä (jpeg-kuva):
	header("Content-type: image/jpeg");

	// Luodaan ja näytetään jpeg-kuva:
	imagejpeg($im);
}

?>

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta