function getImage($path) { if (!file_exists($path) || !is_readable($path)) { return false; } $ext = pathinfo($path, PATHINFO_EXTENSION); switch (strtolower($ext)) { case 'png': case 'jpg': case 'jpeg': // physical image file -> redirect $path = '/coverroot' . substr($path, strlen('/mnt')); $path = str_replace('#', '%23', $path); header('Location: ' . $path); die; // alternative -> return image file contents $mime = 'image/' . $ext; $data = file_get_contents($path); outImage($mime, $data); break; case 'mp3': require_once 'Zend/Media/Id3v2.php'; try { $id3 = new Zend_Media_Id3v2($path); if (isset($id3->apic)) { outImage($id3->apic->mimeType, $id3->apic->imageData); } } catch (Zend_Media_Id3_Exception $e) { // catch any parse errors } require_once 'Zend/Media/Id3v1.php'; try { $id3 = new Zend_Media_Id3v1($path); if (isset($id3->apic)) { outImage($id3->apic->mimeType, $id3->apic->imageData); } } catch (Zend_Media_Id3_Exception $e) { // catch any parse errors } break; case 'flac': require_once 'Zend/Media/Flac.php'; try { $flac = new Zend_Media_Flac($path); if ($flac->hasMetadataBlock(Zend_Media_Flac::PICTURE)) { $picture = $flac->getPicture(); outImage($picture->getMimeType(), $picture->getData()); } } catch (Zend_Media_Flac_Exception $e) { // catch any parse errors } break; case 'm4a': require_once 'Zend/Media/Iso14496.php'; try { $id3 = new Zend_Media_Iso14496($path); $picture = $id3->moov->udta->meta->ilst->covr; $mime = ($picture->getFlags() & Zend_Media_Iso14496_Box_Data::JPEG) == Zend_Media_Iso14496_Box_Data::JPEG ? 'image/jpeg' : (($picture->getFlags() & Zend_Media_Iso14496_Box_Data::PNG) == Zend_Media_Iso14496_Box_Data::PNG ? 'image/png' : null); if ($mime) { outImage($mime, $picture->getValue()); } } catch (Zend_Media_Iso14496_Exception $e) { // catch any parse errors } break; } return false; }
ini_set('display_errors', '1'); include 'connection.php'; // read current session parameters session_start(); session_write_close(); // fetch MPD status $status = _parseStatusResponse(MpdStatus($mpd)); $curTrack = getTrackInfo($mpd, $status['song']); if (isset($curTrack[0]['Title'])) { $status['currentartist'] = $curTrack[0]['Artist']; $status['currentsong'] = $curTrack[0]['Title']; $status['currentalbum'] = $curTrack[0]['Album']; $status['fileext'] = parseFileStr($curTrack[0]['file'], '.'); } $currentpath = "/mnt/" . findPLposPath($status['song'], $mpd); //echo $currentpath; $flac = new Zend_Media_Flac($currentpath); // Extract picture if ($flac->hasMetadataBlock(Zend_Media_Flac::PICTURE)) { header('Content-Type: ' . $flac->getPicture()->getMimeType()); echo $flac->getPicture()->getData(); } else { $ch = curl_init(ui_lastFM_coverart($status['currentartist'], $status['currentalbum'], $_SESSION['lastfm_apikey'])); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $image = curl_exec($ch); curl_close($ch); header('Content-Type: ' . mime_content_type($image)); echo $image; }