простой вопрос по ПХП
Форумы Автоклуба ИЖ.2126.ru
07 Февраля 2026, 02:34:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: С 1-го августа 2013 объявляется бессрочный месячник по борьбе с матом
   Начало   Главная Поиск Правила Камасутра Блоги Чат (1) Галерея Политика конфиденциальности Войти Регистрация  
Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: простой вопрос по ПХП  (Прочитано 2030 раз)
0 Пользователей и 1 Гость смотрят эту тему.
tim123 ТС
Ветеран форума
******

Карма +509/-8
Offline Offline

Пол: Мужской
Сообщений: 2539

Москва, М.О., был ИЖ-2126-030, 2004г

« Ответ #30 : 30 Января 2026, 03:08:55 »

В общем, нашёл, полумера принесла плоды.
Нашёл у магика  portable-version 7.1.1.  Работает просто с флешки. Устанавливается копи-вставкой. Варианты х64 и х32. Формат бмп понимает, во всяком случае самый обычный который.

Но это не есть расширение к пхп.
Просто набор утилит. Не сказал бы, что легковесные. Все вместе больше 200 М, а каждая примерно по 20 М. Но мне достаточно одной.
Притом они пишут, что с ней из пхп можно взаимодействовать, но я не проверял как это. Вряд ли  они про её запуск из пхп через cmd, это само собой.

Нашёл такой же работающий portable-браузер на флешку, хотя он только для х64. Жизнь налаживается.
--------------------------------

П.С. Вы упадёте под стол, когда узнаете, где я нашёл этот portable-магик.
Держитесь крепче:  в своём компе (другой который). Оказывается нашёл ещё год назад 02 февраля, но руки тогда не дошли.

Так что теперь я закончил топик.
Записан
Paramedic

*******

Карма +1539/-10
Offline Offline

Пол: Мужской
Сообщений: 20053

Иваново


Тиран и Диктатор

WWW

Иваново
Megane III Expression, МКПП5, +ESP (Был ИЖ-2126-30)
« Ответ #31 : 30 Января 2026, 08:15:20 »

А разве ф-ция не встроена в расширение?
Встроенными функциями называют функции, входящие в ядро php.

А чем тебе ImageMagic не угодил? Установил его в систему, добавил расширение и всё работает.

Ладно, хорош, если наткнётесь на готовое, но маленькое, плз, дайте знать.
Ты какую задачу решаешь? В GD что-то рисуешь и надо сохранить в .bmp?

Ну тогда держи решение. Правда я его не проверял. Но как я писал, bmp формат простой, данный код формирует заголовок и пишет "сырые" пиксели из GD ресурса.

Код:
<?php

function imagebmp_php5($im$filename)
{
    if (!
is_resource($im)) {
        return 
false;
    }

    
$width  imagesx($im);
    
$height imagesy($im);

    
// Каждая строка должна быть кратна 4 байтам
    
$rowPadding = (- ($width 3) % 4) % 4;
    
$rowSize = ($width 3) + $rowPadding;
    
$dataSize $rowSize $height;
    
$fileSize 54 $dataSize;

    
// --- BMP Header ---
    
$header '';
    
$header .= 'BM';                          // Signature
    
$header .= pack('V'$fileSize);         // File size
    
$header .= pack('V'0);                 // Reserved
    
$header .= pack('V'54);                // Pixel data offset

    // --- DIB Header (BITMAPINFOHEADER) ---
    
$header .= pack('V'40);                // Header size
    
$header .= pack('V'$width);
    
$header .= pack('V'$height);
    
$header .= pack('v'1);                 // Planes
    
$header .= pack('v'24);                // Bits per pixel
    
$header .= pack('V'0);                 // Compression (none)
    
$header .= pack('V'$dataSize);         // Image size
    
$header .= pack('V'0);                 // X pixels per meter
    
$header .= pack('V'0);                 // Y pixels per meter
    
$header .= pack('V'0);                 // Colors used
    
$header .= pack('V'0);                 // Important colors

    // --- Pixel Data ---
    
$pixels '';

    
// BMP пишется снизу вверх
    
for ($y $height 1$y >= 0$y--) {
        for (
$x 0$x $width$x++) {
            
$rgb imagecolorat($im$x$y);

            
$r = ($rgb >> 16) & 0xFF;
            
$g = ($rgb >> 8) & 0xFF;
            
$b $rgb 0xFF;

            
// В BMP порядок BGR
            
$pixels .= chr($b) . chr($g) . chr($r);
        }

        
// Padding до 4 байт
        
for ($p 0$p $rowPadding$p++) {
            
$pixels .= chr(0);
        }
    }

    
// Запись в файл
    
$fp fopen($filename'wb');
    if (!
$fp) {
        return 
false;
    }

    
fwrite($fp$header);
    
fwrite($fp$pixels);
    
fclose($fp);

    return 
true;
}


пример использования

Код:
$img = imagecreatetruecolor(200, 100);

$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);

imagefill($img, 0, 0, $white);
imagestring($img, 5, 10, 40, 'Hello BMP', $black);

imagebmp_php5($img, 'test.bmp');

imagedestroy($img);

« Последнее редактирование: 30 Января 2026, 08:23:54 от Paramedic » Записан

Это сейчас мода такая — задавать глупые вопросы с невинным видом, типа, "всё совсем не так, как вам кажется"?

tim123 ТС
Ветеран форума
******

Карма +509/-8
Offline Offline

Пол: Мужской
Сообщений: 2539

Москва, М.О., был ИЖ-2126-030, 2004г

« Ответ #32 : 30 Января 2026, 19:12:17 »

Что сказать? "Сразу так бы и сказал"(С))   
Годится, сжатия не нужно.
Это то, чего не смог найти бесплатного.
Проверил пока на нескольких файлах разных размеров и разного происхождения,
ну и исходник тоже. Загружал в канвас из файла и сохранял твоей ф-цией.

А ведь я не знал, что существует pack(). И что паддинг понадобится.
И ведь хотел ещё прочитать назидательно, что писать надо задом на перёд, что если загонять строку по байтам, то для больших размеров надо переставлять байты, а то даже и пары байтов, и то же - для большого заголовка и т.д...
А тут оказалась готовая pack().
--------------------------------------------------
На чтение ф-ция есть, теперь есть и на запись, всё очень компактно.

Дальше делайте что хотите без меня.
Записан
tim123 ТС
Ветеран форума
******

Карма +509/-8
Offline Offline

Пол: Мужской
Сообщений: 2539

Москва, М.О., был ИЖ-2126-030, 2004г

« Ответ #33 : 30 Января 2026, 19:38:36 »

А чем тебе ImageMagic не угодил? Установил его в систему, добавил расширение и всё работает.

В GD что-то рисуешь и надо сохранить в .bmp?
Снова три раза "Да".
По п.п. 1-2 ещё раз: добавлять расширение надо для в.>=7.2, где есть нужная версия GD2, и которое на самом слабом компе не работает.
ПХП скомпилировано с динамической поддержкой б/плат-й рантайм-длл из .НЕТ или ВС
нужного варианта этой длл не смог ни найти, ни сгрузить из МС - последнее может быть ещё и получится в другом месте, когда-нибудь.
Но ради этого ставить ещё весь пакет .НЕТ или ВС будет перебором. Да ещё и неизвестно откуда теперь. Да и поставится ли. И  места уже мало.

Да и вообще из-за последних двух дней и ночей я могу уже неточно помнить, что, где и как мне помешало. Но выделенное жирным выше и здесь (б/плат-й рантайм-длл) есть первый невыполнимый пункт, когда пытаюсь действовать  штатным порядком.

Всем спасибо за внимание и фактическую помощь и полезные советы.
Записан
tim123 ТС
Ветеран форума
******

Карма +509/-8
Offline Offline

Пол: Мужской
Сообщений: 2539

Москва, М.О., был ИЖ-2126-030, 2004г

« Ответ #34 : 31 Января 2026, 04:37:52 »

Накануне наткнулся на набор известных  тестовых IM Examples, Photo Store. Думал стянуть все файлы, а не пускают внутрь.
Обошёлся пдф'ом страницы, где скопом миниатюры. Подумал, что м.б. любопытно будет их увидеть.
Жипег из него 300 Kb, сюда не влезет, надо пережать.
Сегодня уже запустил процесс преобразований, заодно  ещё раз проверил функции туда и обратно.
  pdf --> jpg(300 Kb) --> bmp(2,8 Mb) --> jpg(140 Kb)
См.  вложение.


* IM Examples, Photo-Store.pdf-0003-2.jpg (144.22 Кб, 725x1302 - просмотрено 7 раз.)
Записан
Paramedic

*******

Карма +1539/-10
Offline Offline

Пол: Мужской
Сообщений: 20053

Иваново


Тиран и Диктатор

WWW

Иваново
Megane III Expression, МКПП5, +ESP (Был ИЖ-2126-30)
« Ответ #35 : 02 Февраля 2026, 13:31:12 »

Всем спасибо за внимание и фактическую помощь и полезные советы.
Обращайся, рады помочь Smile
Записан

Это сейчас мода такая — задавать глупые вопросы с невинным видом, типа, "всё совсем не так, как вам кажется"?

Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines

Яндекс.Метрика

Google последней посетил эту страницу Вчера в 17:30:15
×