Php 如何改变jpg品质出口?

Php 如何改变jpg品质出口?,php,jpeg,Php,Jpeg,在以下将jpg存储在db中的代码中,我需要知道如何首先将jpg更改为40%的质量,然后保存?我尝试了,但它保存了空文件: function exportGraphics($table_name) { $odbc_query = "SELECT * FROM " . $table_name; mkdir("TI/" . $table_name); $data = odbc_exec($this->odbc_id, $odbc_query); odbc_lon

在以下将jpg存储在db中的代码中,我需要知道如何首先将jpg更改为40%的质量,然后保存?我尝试了,但它保存了空文件:

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()[函数.imagecreatefromstring]:gd 警告:内存分配乘法的一个参数为 负或零,在中正常运行失败 X:\denwer\www\denwer\tecdoc3.php,第103行

警告:imagecreatefromstring()[函数.imagecreatefromstring]: 传递的数据不是中的“WBMP”格式 X:\denwer\www\denwer\tecdoc3.php,第103行

警告:imagecreatefromstring()[函数.imagecreatefromstring]: 无法使用中的数据创建GD映像流 X:\denwer\www\denwer\tecdoc3.php,第103行

警告:imagecreatefromstring()[函数.imagecreatefromstring]:gd 警告:内存分配乘法的一个参数为 负或零,在中正常运行失败 X:\denwer\www\denwer\tecdoc3.php,第103行

原始代码:

 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 . " çàâåðøåí!";
 }
试试这个:

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

警告是什么意思(添加到问题中)我认为这行
$im=imagecreatefromstring($row['GRD_GRAPHIC'])
失败是因为PHP认为
$row['GRD\u GRAPHIC']
不是有效的图像数据。数据是否以任何方式编码(例如base64)以及它应该是什么图像格式,JPG?jp2必须是,我添加了原始脚本这是你的问题,GD不支持JPEG-2000(jp2)文件,只有JPEG。如何解决这个问题?或者更简单的方法是将所有文件发送到(acdsee)这样的软件并在那里进行转换?但是有大约10000张图片