Nano Hash - криптовалюты, майнинг, программирование

Как изменить качество экспорта jpg?

В следующем коде, который хранит jpg в db, мне нужно знать, как сначала изменить качество jpg на 40%, а затем сохранить? я пробовал с imagejpg, но он сохраняет нулевые файлы:

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: один параметр для умножения выделения памяти отрицательный или нулевой, изящная ошибка операции в X:\denwer\www\denwer\tecdoc3.php в строке 103

Предупреждение: imagecreatefromstring() [function.imagecreatefromstring]: переданные данные не в формате «WBMP» в X:\denwer\www\denwer\tecdoc3.php в строке 103.

Предупреждение: imagecreatefromstring() [function.imagecreatefromstring]: не удалось создать поток изображений GD из данных в X:\denwer\www\denwer\tecdoc3.php в строке 103.

Предупреждение: imagecreatefromstring() [function.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 . " çàâåðøåí!";
 }
26.07.2012

Ответы:


1

Попробуй это:

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
26.07.2012
  • что означают предупреждения (добавить к вопросу) 27.07.2012
  • Я думаю, что эта строка $im = imagecreatefromstring($row['GRD_GRAPHIC']); не работает, потому что PHP не считает $row['GRD_GRAPHIC'] допустимыми данными изображения. Закодированы ли эти данные каким-либо образом (например, base64) и какой формат изображения должен быть, JPG? 27.07.2012
  • jp2 должен быть, я добавил оригинальный скрипт 28.07.2012
  • Это ваша проблема, GD не поддерживает файлы JPEG-2000 (jp2), только JPEG. 28.07.2012
  • как это решить? или проще это все файлы отправить в такой софт как (acdsee) и там конвертировать? но там около 10000 изображений 28.07.2012
  • @PavelBY Добавлено возможное решение. 28.07.2012
  • еще один вопрос. Если я удалю unlink($file_name_jpg); // избавляемся от временного файла jp2, я получаю экспорт всех записей в БД, но у меня все еще остаются файлы jp2, но если я напишу это, то будет экспортирована только одна запись 29.07.2012
  • Возможно, exec of convert не работает, у вас должно быть много файлов .jpg, если он работает, поскольку он должен выводить окончательный файл с расширением .jpg с тем же именем, что и файл .jp2. 29.07.2012
  • он дает два файла: jp2 и jpg (если удалить эту строку много jp2 и jpg) 29.07.2012
  • while($row = odbc_fetch_row($data)) { если я изменю таким образом, это не сработает, только один пустой jp2? 06.08.2012
  • как проверить данные являются действительными данными изображения? 21.06.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..