Php 如何改变jpg品质出口?
在以下将jpg存储在db中的代码中,我需要知道如何首先将jpg更改为40%的质量,然后保存?我尝试了,但它保存了空文件: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
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张图片