1

アニメーション GIF の最初のフレームのみを PNG に表示して、サムネイルとして使用しようとしています。私は現在、このコードを持っています:

<?php
function myImageCreateFromGif($file_or_url) { 
$dummy_file = "/tmp/dummy.gif"; 
# if this is a url, use fopen to get the file data, then 
# save it to a dummy file 
if (preg_match("/(http|ftp):\/\//i", $file_or_url)) { 
        # open the file using fopen, which supports remote URLs 
        $input = fopen($file_or_url, "rb"); 
        # read the contents of the file 
        # will accept files up to 10Mb, but will probably get 
        # and EOF before that, we have to do it this way because 
        # filesize isn't designed to work with URLs.  sigh. 
        $image_data = fread($input, 10000000); 
        fclose($input); 
        # write the contents to a dummy file 
        $output = fopen("$dummy_file", "wb"); 
        fwrite($output, $image_data); 
        fclose($output); 
        # create the gif from the dummy file 
        $image = ImageCreateFromGif($dummy_file); 
        # get rid of the dummy file 
        unlink($dummy_file); 
    } 
    # if it's not a URL, we can simply open the image directly 
    else { 
        $image = ImageCreateFromGif($file_or_url); 
    } 
    if ($image) { return $image; } 
    else { return 0; } 
}
$image = "http://i.imgur.com/".$_GET["i"].".gif";
$img = myImageCreateFromGif($image);
if($img) {
    header("Content-Type: image/png");
    ImagePNG($img);
    ImageDestroy($img);
}
?>

これは問題なく動作しますが、GIF は PNG になる前に完全に読み込まれないため、ページは、GIF がまったく読み込まれなかった場合に破損した画像を返すか、部分的に読み込まれた GIF を返します。読み込みに成功しました。では、PNGにする前にGIFを完全にロードするにはどうすればよいですか?

4

2 に答える 2

1

ImageMagick を使用convertして、GIF の最初のフレームを PNG に変換します。[0]ファイル名に追加することで、最初のフレームに対処します。

ああ、最近のバージョンの はconvert、ソース ファイルの場所の URI を適切に直接処理できます。

 convert  "http://imgur.com/a.gif[0]"  a.png

また

 convert  "http://imgur.com/a.gif[0]"  -thumbnail  128x128  a.png
于 2012-08-21T16:13:57.113 に答える
0

http 経由でファイルを取得するには、perl を使用する必要があります。

これはphpマニュアルからのものです: http://www.php.net/manual/de/function.curl-exec.php

/**
 * Send a GET requst using cURL
 * @param string $url to request
 * @param array $get values to send
 * @param array $options for cURL
 * @return string
 */
function curl_get($url, array $get = NULL, array $options = array())
{   
    $defaults = array(
        CURLOPT_URL => $url. (strpos($url, '?') === FALSE ? '?' : ''). http_build_query($get),
        CURLOPT_HEADER => 0,
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_TIMEOUT => 4
    );

    $ch = curl_init();
    curl_setopt_array($ch, ($options + $defaults));
    if( ! $result = curl_exec($ch))
    {
        trigger_error(curl_error($ch));
    }
    curl_close($ch);
    return $result;
} 

パラメータで設定したファイルの内容を返し$urlます。

于 2012-08-21T16:14:15.050 に答える