3

jpgをdbに保存する次のコードでは、最初にjpgを40%の品質に変更してから保存する方法を知る必要がありますか?私はで試しましimagejpgたが、nullファイルを保存します:

function exportGraphics($table_name)
{
    $odbc_query = "SELECT * FROM " . $table_name;
    mkdir("TI/" . $table_name);

    $data = odbc_exec($this->odbc_id, $odbc_query);
    odbc_longreadlen($data, 10485760); // 10MB = 10485760
    while (odbc_fetch_row($data)) {
        $row = odbc_fetch_array($data);
        if ($row['GRD_ID'] != "") {
            $file_name_jpg = "TI/" . $table_name . "/" . $row['GRD_ID'] . ".jpg";
            $file = fopen($file_name_jpg, "w");
            fputs($file, $row['GRD_GRAPHIC']);
            fclose($file);
            set_time_limit(3600);
            unset($row);
        }
    }
    print "Ýêñïîðò êàðòèíîê èç òàáëèöû " . $table_name . " çàâåðøåí!";
}

警告:imagecreatefromstring()[function.imagecreatefromstring]:gd警告:メモリ割り当て乗算の1つのパラメーターが負またはゼロであり、103行目のX:\ denwer \ www \ denwer\tecdoc3.phpで正常に操作に失敗します

警告:imagecreatefromstring()[function.imagecreatefromstring]:渡されたデータはX:\ denwer \ www \ denwer\tecdoc3.phpの103行目の「WBMP」形式ではありません

警告:imagecreatefromstring()[function.imagecreatefromstring]:103行目のX:\ denwer \ www \ denwer\tecdoc3.phpのデータからGDイメージストリームを作成できませんでした

警告:imagecreatefromstring()[function.imagecreatefromstring]:gd警告:メモリ割り当て乗算の1つのパラメーターが負またはゼロであり、103行目のX:\ denwer \ www \ denwer\tecdoc3.phpで正常に操作に失敗します

元のコード:

 function exportGraphics($table_name) {
 $odbc_query = "SELECT * FROM " . $table_name;
 mkdir("TI/" . $table_name);

 $data = odbc_exec($this->odbc_id, $odbc_query);
 odbc_longreadlen($data, 10485760); //10MB = 10485760
 while(odbc_fetch_row($data)) 
 { 
 $row = odbc_fetch_array($data);
 if($row['GRD_ID'] != "") {
 $file_name_jp2 = "TI/" . $table_name . "/" . $row['GRD_ID'] . ".jp2";
 $file = fopen ($file_name_jp2, "w");
 fputs($file, $row['GRD_GRAPHIC']);
 fclose($file);
 set_time_limit(0);
 unset($row);
 }
 }
 print "Ýêñïîðò êàðòèíîê èç òàáëèöû " . $table_name . " çàâåðøåí!";
 }
4

1 に答える 1

2

これを試して:

function exportGraphics($table_name) {
    $odbc_query = "SELECT * FROM " . $table_name;
    mkdir("TI/" . $table_name);

    $data = odbc_exec($this->odbc_id, $odbc_query);
    odbc_longreadlen($data, 10485760); //10MB = 10485760
    while(odbc_fetch_row($data))
    {
        $row = odbc_fetch_array($data);
        if($row['GRD_ID'] != "") {
            $file_name_jpg = "TI/" . $table_name . "/" . $row['GRD_ID'] . ".jpg";

            // create GD graphic from string, call imagejpeg to save new image
            $im = imagecreatefromstring($row['GRD_GRAPHIC']);
            imagejpeg($im, $file_name_jpg, 40);

            set_time_limit(3600);
            unset($row);
        }
    }
    print "Ýêñïîðò êàðòèíîê èç òàáëèöû " . $table_name . " çàâåðøåí!";
}

それとも、まさにあなたが試したことですか?

何らかの理由でうまくいかない場合は、次の方法を試してください。

$im = imagecreatefromstring($row['GRD_GRAPHIC']);
ob_start();
imagejpeg($im, null, 40);
$imgData = ob_get_contents();
ob_end_clean();

$file = fopen ($file_name_jpg, "w+b");
fputs($file, $imgData);
fclose($file);

編集: GD が機能しない理由は、JPEG-2000 ファイル形式をサポートしていないためです。

考えられる解決策: サーバーにインストールimagemagickして、次のようなコードを試してください。

$file_name_jpg = "TI/" . $table_name . "/" . $row['GRD_ID'] . ".jp2";
$file_out_jpg  = str_replace('.jp2', '.jpg', $file_name_jpg);

file_put_contents($file_name_jpg, $row['GRD_GRAPHIC']);

// execute imagemagick convert to change to jpeg with quality 40
exec("/usr/bin/convert $file_name_jpg -quality 40 -format jpg $file_out_jpg");
unlink($file_name_jpg); // get rid of temp jp2 file
于 2012-07-26T22:09:29.673 に答える