2011-01-30 19 views
2

getid3を使用してAPIC画像をmp3ファイルに書き込もうとしています。コードはここにあります。getid3(id3v2)を使用してAPICをmp3ファイルに書き込む

$cover = "/home/user/public_html/artwork/cover.jpg"; 
$TagData['attached_picture'][]=array(
'picturetypeid'=>2, // Cover. More: module.tag.id3v2.php -> function APICPictureTypeLookup 
'description'=>'cover', // text field 
'mime'=>'image/jpeg', // Mime type image 
'data'=>$cover // Image data 
); 

しかし、うまくいきません。画像サイズは約1.5 MBです。私はそれかsthのサイズを変更する必要がありますか?

どこが間違っていますか?彼らは彼らのウェブサイト上で持ってデモを見てみると

おかげ

+0

あなたはどのライブラリを使用していますか?どのようにデータをMP3ファイルに保存していますか? –

+0

私はgetid3ライブラリを使用しています。http://www.getid3.org/ –

+0

タイトル、アーティスト、アルバムなどの情報を問題なく保存できますが、APICに関しては正しく動作しません。 –

答えて

1

:コードのhttp://www.getid3.org/source/demo.write.phps

スニペット:

$fd = fopen($_FILES['userfile']['tmp_name'], 'rb') 
$APICdata = fread($fd, filesize($_FILES['userfile']['tmp_name'])); 
fclose ($fd); 

$imagetypes = array(1=>'gif', 2=>'jpeg', 3=>'png'); 
if (isset($imagetypes[$APIC_imageTypeID])) { 
    $TagData['attached_picture'][0]['data']   = $APICdata; 
    $TagData['attached_picture'][0]['picturetypeid'] = $_POST['APICpictureType']; 
    $TagData['attached_picture'][0]['description'] = $_FILES['userfile']['name']; 
    $TagData['attached_picture'][0]['mime']   = 'image/'.$imagetypes[$APIC_imageTypeID]; 
} 

データキーだけではなく、画像の内容にする必要があるように思えますイメージファイルへのパス。

$cover = "/home/user/public_html/artwork/cover.jpg"; 
$fd = fopen($cover, 'rb') 
$APICdata = fread($fd, filesize($coverFile)); 
fclose ($fd); 

$TagData['attached_picture'][]=array(
'picturetypeid'=>2, // Cover. More: module.tag.id3v2.php -> function APICPictureTypeLookup 
'description'=>'cover', // text field 
'mime'=>'image/jpeg', // Mime type image 
'data'=>$APICdata // Image data 
); 

注: は、だからあなたの場合には、それはのようなものでなければなりませんこれは単なるデモコードで一目た後、私はこのライブラリを使用するか、このコードをテストしていませんされています。

0

GetID3には、ファイルパスではなくデータのために送信するファイルの内容が必要です。その後、ファイルに埋め込むことができます。

$cover = "/home/user/public_html/artwork/cover.jpg"; 
$TagData['attached_picture'][]=array(
    'picturetypeid'=>2, // Cover. More: module.tag.id3v2.php -> function APICPictureTypeLookup 
    'description'=>'cover', // text field 
    'mime'=>'image/jpeg', // Mime type image 
    'data'=> file_get_contents($cover) // Image data; not the file name 
); 
テスト

と:)

+0

の理由で動作しません:(私は$ tagwriter-> tag_data = $ TagDataの後にこれらの行を入れます; $ tagwriter-> WriteTags(); –

+0

そして、あなたはどんなエラーを出しているのですか? ? –

+0

問題の原因となっている場合は、ファイルのサイズかもしれませんが、サイズを変更してみてください。 –

0

作業を試してみて、私は、ソースコードでこれを見つけた:

case 'APIC': 
    // 4.14 APIC Attached picture 
    // Text encoding  $xx 
    // MIME type   <text string> $00 
    // Picture type  $xx 
    // Description  <text string according to encoding> $00 (00) 
    // Picture data  <binary data> 

ので、画像データはバイナリでなければなりません。

ソリューションはここにある:この1つは長い時間のために私のために働いているgetid3 demo

0

:上記のちょうどneeddアルバムアートを含め、ID3タグを更新するために、誰については、

$TagData = array(); //your other tags 
    $fd = fopen($albumPath, 'rb'); 
    $APICdata = fread($fd, filesize($albumPath)); 
    fclose($fd); 

    if($APICdata) { 
     $TagData += array(
      'attached_picture' => array(0 => array(
       'data'   => $APICdata, 
       'picturetypeid' => '0x03', 
       'description' => 'cover', 
       'mime'   => image_type_to_mime_type($albumExifType) 
      )) 
     ); 
    } 
    //and write the tags to file 
0
<?php 
///////////////////////////////////////////////////////////////// 
/// getID3() by James Heinrich <[email protected]>    // 
// available at http://getid3.sourceforge.net     // 
//   or http://www.getid3.org       // 
//   also https://github.com/JamesHeinrich/getID3  // 
///////////////////////////////////////////////////////////////// 
//                // 
// /demo/demo.simple.write.php - part of getID3()    // 
// Sample script showing basic syntax for writing tags   // 
// See readme.txt for more details        // 
//               /// 
///////////////////////////////////////////////////////////////// 

//die('Due to a security issue, this demo has been disabled. It can be enabled by removing line '.__LINE__.' in '.$_SERVER['PHP_SELF']); 

$TextEncoding = 'UTF-8'; 
$albumPath = "img/img.jpg"; // path to your image 


require_once('../getid3/getid3.php'); 
// Initialize getID3 engine 
$getID3 = new getID3; 
$getID3->setOption(array('encoding'=>$TextEncoding)); 

require_once('../getid3/write.php'); 
// Initialize getID3 tag-writing module 
$tagwriter = new getid3_writetags; 
//$tagwriter->filename = '/path/to/file.mp3'; 
$tagwriter->filename = 'uploads/problem.mp3'; 

//$tagwriter->tagformats = array('id3v1', 'id3v2.3'); 
$tagwriter->tagformats = array('id3v2.3'); 

// set various options (optional) 
$tagwriter->overwrite_tags = true; // if true will erase existing tag data and write only passed data; if false will merge passed data with existing tag data (experimental) 
$tagwriter->remove_other_tags = false; // if true removes other tag formats (e.g. ID3v1, ID3v2, APE, Lyrics3, etc) that may be present in the file and only write the specified tag format(s). If false leaves any unspecified tag formats as-is. 
$tagwriter->tag_encoding  = $TextEncoding; 
$tagwriter->remove_other_tags = true; 

// populate data array 
$TagData = array(
    'title'   => array('My Song'), 
    'artist'  => array('My Song'), 
    'album'   => array('My Song'), 
    'year'   => array('20015'), 
    'genre'   => array('My Song'), 
    'comment'  => array('My Song'), 
    'track'   => array('01'), 
); 

$fd = fopen($albumPath, 'rb'); 
$APICdata = fread($fd, filesize($albumPath)); 
fclose($fd); 

if($APICdata) { 
    $TagData += array(
     'attached_picture' => array(0 => array(
      'data'   => $APICdata, 
      'picturetypeid' => '0x03', 
      'description' => 'cover', 
      'mime'   => image_type_to_mime_type(@$albumExifType) 
     )) 
    ); 
} 



$tagwriter->tag_data = $TagData; 

// write tags 
if ($tagwriter->WriteTags()) { 
    echo 'Successfully wrote tags<br>'; 
    if (!empty($tagwriter->warnings)) { 
     echo 'There were some warnings:<br>'.implode('<br><br>', $tagwriter->warnings); 
    } 
} else { 
    echo 'Failed to write tags!<br>'.implode('<br><br>', $tagwriter->errors); 
} 

コードは正常に動作します。動作するにはgetID3ライブラリが必要です。 この回答はJacopKaneの回答に基づいているので、クレジットは彼に行く

関連する問題