Вход Регистрация
Файл: sys/inc/libs/MP3/IDv2/Frame/APIC.php
Строк: 324
<?php
/**
 * This file contains the generic implementation for APIC frames
 *
 * PHP version 5
 *
 * Copyright (C) 2006-2007 Alexander Merz
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @category  File_Formats
 * @package   MP3_IDv2
 * @author    Alexander Merz <alexander.merz@web.de>
 * @copyright 2006-2007 Alexander Merz
 * @license   http://www.gnu.org/licenses/lgpl.html LGPL License 2.1
 * @version   CVS: $Id: APIC.php 248624 2007-12-20 19:07:33Z alexmerz $
 * @link      http://pear.php.net/package/MP3_IDv2
 * @since     File available since Release 0.1
 */

/*
 * Load PEAR for error handling
 */
if (!class_exists('PEAR_Exception')) {
    include_once 
'PEAR/Exception.php';
}

/*
 * load parent class
 */
if (!class_exists('MP3_IDv2_Frame')) {
    include_once 
'MP3/IDv2/Frame.php';
}

/**
 * error number, if the image file couldn't be found
 */
define('PEAR_MP3_IDV2_IMAGENOTFOUND'1010);

/**
 * error message, if a file couldn't be found
 */
define('PEAR_MP3_IDV2_IMAGENOTFOUND_S''Image %s not found.');

/**
 * error number, if the image file couldn't be wrote
 */
define('PEAR_MP3_IDV2_IMAGENOTWROTE'1020);

/**
 * error message, if a file couldn't be wrote
 */
define('PEAR_MP3_IDV2_IMAGENOTWROTE_S''Could not wrote image to %s.');


/**
 * Data stucture for APIC frames in a tag.
 * (Attached Picture)
 *
 * @category File_Formats
 * @package  MP3_IDv2
 * @author   Alexander Merz <alexander.merz@web.de>
 * @license  http://www.gnu.org/licenses/lgpl.html LGPL License 2.1
 * @version  Release: @package_ version@
 * @link     http://pear.php.net/package/MP3_IDv2
 * @since    Class available since Release 0.1.0
 */
class MP3_IDv2_Frame_APIC extends MP3_IDv2_Frame
{

    
/**
     * the encoding of text.
     * @var string one byte representing the encoding
     */
    
private $_encoding "";

    
/**
     * the MIME type of the image
     * @var string
     */
    
private $_mime "n";

    
/**
     * the type of the image
     */
    
private $_pictype 0;

    
/**
     * description of the image
     * @var string
     */
    
private $_descr "n";

    
/**
     * picture data
     * @var string
     */
    
private $_picdata null;

    
/**
     * the list of picture types and there description
     */
    
private $_ptlist = array(
     
"Other",
     
"PNG-File icon",
     
"Other file icon",
     
"Cover (front)",
     
"Cover (back)",
     
"Leaflet page",
     
"Media",
     
"Lead artist/lead performer/soloist",
     
"Artist/performer",
     
"Conductor",
     
"Band/Orchestra",
     
"Composer",
     
"Lyricist/text writer",
     
"Recording Location",
     
"During recording",
     
"During performance",
     
"Movie/video screen capture",
     
"A bright coloured fish",
     
"Illustration",
     
"Band/artist logotype",
     
"Publisher/Studio logotype"
    
);


    
/**
     * Sets the encoding for the text for the frame.
     *
     * @param string $enc the byte containing the encoding identifier
     *
     * @return void
     * @access public
     */
    
public function setEncoding($enc)
    {
        
$this->_changed  true;
        
$this->_encoding $enc;
    }

    
/**
     * Returns the encoding identifier for the text in the frame.
     *
     * @return string the identifier
     * @access public
     */
    
public function getEncoding()
    {
        return 
$this->_encoding;
    }

    
/**
     * Sets the mime type of the picture
     *
     * @param string $mime the mime type
     *
     * @return void
     * @access public
     */
    
public function setMimeType($mime)
    {
        
$this->_changed true;
        if (
substr($mime, -1) == "n") {
            
$mime substr($mime0, -1);
        }
        
$this->_mime $mime;
    }

    
/**
     * Returns the mime type of the picture
     *
     * @param bool $nul if true, deliever with ending null
     *
     * @return string the mime type
     * @access public
     */
    
public function getMimeType($nul=false)
    {
        
$ret $this->_mime;
        if (
$nul) {
            if (
"" != substr($ret, -1)) {
                
$ret $ret."";
            }
        }
        return 
$ret;
    }

    
/**
     * Sets the picture type.
     *
     * @param string $type the picture type
     *
     * @return void
     * @access public
     */
    
public function setType($type)
    {
        
$this->_changed true;
        
$this->_pictype $type;
    }

    
/**
     * Returns the picture type.
     *
     * @return string the picture type
     * @access public
     */
    
public function getType()
    {
        return 
$this->_pictype;
    }

    
/**
     * Returns the description of the picture type.
     *
     * @return string the picture type
     * @access public
     */
    
public function getTypeDescr()
    {
        if (
$this->_pictype && $this->_pictype 22) {
            return 
$this->_ptlist[$this->_pictype];
        } else {
            return 
null;
        }
    }

    
/**
     * Sets the description of the picture
     *
     * @param string $descr the description
     *
     * @return void
     * @access public
     */
    
public function setDescription($descr)
    {
        
$this->_changed true;
        if (
substr($descr, -1) == "n") {
            
$descr substr($descr0, -1);
        }
        
$this->_descr $descr;
    }

    
/**
     * Returns the description of the picture
     *
     * @param bool $nul if true, deliever with ending null
     *
     * @return string the description
     * @access public
     */
    
public function getDescription($nul false)
    {
        
$ret $this->_descr;
        if (
$nul) {
            if (
"" != substr($ret, -1)) {
                
$ret $ret."";
            }
        }
        return 
$ret;
    }

    
/**
     * Sets the picture binary data
     *
     * @param string $data the binary picture data
     *
     * @return void
     * @access public
     */
    
public function setPicture($data)
    {
        
$this->_changed true;
        if (
substr($data, -1) != "n") {
            
$data $data."n";
        }
        
$this->_picdata $data;
    }

    
/**
     * Returns the mime type of the picture
     *
     * @return string the mime type
     * @access public
     */
    
public function getPicture()
    {
        return 
$this->_picdata;
    }


    
/**
     * Creates the content of the frame (encoding+text)
     *
     * @return string the frame content
     * @access public
     */
    
public function createContent()
    {
        return 
pack("c"$this->getEncoding()).
                    
$this->getMimeType(true).
                    
pack("c"$this->getType()).
                    
$this->getDescription(true).
                    
$this->getPicture();
    }

    
/**
     * Sets the data of the frame and processes it.
     *
     * @param string $content the unproccess content for the frame
     *
     * @return void
     * @access public
     */
    
public function setRawContent($content)
    {
        
$this->_changed true;
        
$this->_content $content;

        
$c unpack('C1enc'$content[0]);

        
$this->setEncoding($c['enc']);

        
$i    1;
        
$mime '';

        while (
$content[$i]!="") {
            
$mime $mime.$content[$i];
            
$i++;
        }
        
$this->setMimeType($mime);

        
$i++;

        
$t unpack("c1pt"$content[$i]);

        
$this->setType($t['pt']);

        
$i++;

        
$desc '';
        while (
$content[$i]!="") {
            
$desc $desc.$content[$i];
            
$i++;
        }

        
$this->setDescription($desc);
        
$this->setPicture(substr($content$i+1));
    }

    
/**
     * Writes the picture data to a file
     *
     * @param string $file the file name
     *
     * @return bool true if file could written
     * @access public
     */
    
public function writeToFile($file)
    {
        
$h fopen($file"wb");
        if (
is_resource($h)) {
            
fwrite($h$this->getPicture());
            
fclose($h);
            return 
true;
        } else {
            
$message sprintf(PEAR_MP3_IDV2_IMAGENOTWROTE_S$file);
            throw new 
PEAR_Exception($messagePEAR_MP3_IDV2_FILENOTFOUND);
        }
    }

    
/**
     * Reads the picture data from a file
     *
     * @param string $file the file name
     *
     * @return void
     * @access public
     */
    
public function readFromFile($file)
    {
        if (
file_exists($file)) {
            
$this->_picdata file_get_contents($file);
        } else {
            
$message sprintf(PEAR_MP3_IDV2_IMAGENOTFOUND_S$file);
            throw new 
PEAR_Exception($messagePEAR_MP3_IDV2_FILENOTFOUND);
        }
        return 
true;
    }

    
/**
     * Sets the id and purpose of the frame only
     *
     * @access public
     */
    
public function __construct()
    {
        
$this->setId("APIC");
        
$this->setPurpose("Attached Picture");
    }

    
/**
     * Returns the frame content as something printable
     *
     * @return string the frame content
     * @access public
     */
    
public function toString()
    {
        return 
$this->getID()." (".$this->getPurpose().") ".
                
$this->getMimeType()." ".$this->getTypeDescr()." ".
                
$this->getDescription();
    }
}
?>
Онлайн: 0
Реклама