Получить содержимое png файла.

Тема в разделе "PHP", создана пользователем Monterpan, 20 фев 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Monterpan

    Monterpan Постоялец

    Регистр.:
    3 мар 2008
    Сообщения:
    150
    Симпатии:
    27
    есть следующий код:
    PHP:
    ............
    $logoImage ImageCreateFromPNG('http://site.ru/sign.png'); 
    $logoW ImageSX($logoImage); 
    $logoH ImageSY($logoImage); 

    ImageCopy($photoImage$logoImage$imgW-$logoW$imgH-$logoH-1500$logoW$logoH); 
    ............
    нужно убрать вызов чтения внешнего файла http://site.ru/sign.png, т.е. сделать, что-нибудь похожее, как ниже:

    PHP:
    ............
    $logoImage 'asdfjkaskljkasja'
    $logoW ImageSX($logoImage); 
    $logoH ImageSY($logoImage); 

    ImageCopy($photoImage$logoImage$imgW-$logoW$imgH-$logoH-1500$logoW$logoH); 
    ............
    Т.е обращаться к внешнему файлу нельзя.

    var_dump(ImageCreateFromPNG('http://site.ru/sign.png')); не помог.

    Помогите, пожалуйста.
     
  2. mywebsru

    mywebsru Создатель

    Регистр.:
    13 фев 2009
    Сообщения:
    17
    Симпатии:
    5
    Так imagecopy вторым аргументом принимает переменую типа resource
    int imagecopy ( resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h )

    А вы хотите чтобы она работала со строкой.
    Чтобы на картинке появился текст или график например надо как-то подругому...

    У меня вот такой файл есть
    Код:
    function waterMark($fileInHD, $wmFile, $jpegQuality = 90, $margin = 5) {
    $wmImg   = imageCreateFromPNG($wmFile);
    $jpegImg = imageCreateFromJPEG($fileInHD);
    // Water mark random position
    $wmX = (bool)rand(0,0) ? $margin : (imageSX($jpegImg) - imageSX($wmImg)) - $margin;
    $wmY = (bool)rand(0,0) ? $margin : (imageSY($jpegImg) - imageSY($wmImg)) - $margin;
    // Water mark process
    //imageCopyMerge($jpegImg, $wmImg, $wmX, $wmY, 0, 0, imageSX($wmImg), imageSY($wmImg), $transparency);
    imagealphablending($jpegImg, 1);
    imagealphablending($wmImg, 1);
    imagecopy($jpegImg, $wmImg, $wmX,$wmY,0,0,imageSX($wmImg),imageSY($wmImg));
    // Overwriting image
    ImageJPEG($jpegImg, $fileInHD, $jpegQuality);
    }
    
    waterMark($ftmp_1,'images/logo_on_photo.png');
    
    А можно сделать что-то такое
    Код:
    function waterMark($fileInHD, $wmText, $jpegQuality = 90, $margin = 5) {
    //$wmImg   = imageCreateFromPNG($wmFile);
    $jpegImg = imageCreateFromJPEG($fileInHD);
    
    // write the string at the top left
    $textcolor = imagecolorallocate($jpegImg, 0, 0, 255);
    imagestring($jpegImg, 5, 0, 0, $wmText, $textcolor);
    
    // Overwriting image
    ImageJPEG($jpegImg, $fileInHD, $jpegQuality);
    }
    
    waterMark($ftmp_1,'WaterMark');
    
     
  3. Monterpan

    Monterpan Постоялец

    Регистр.:
    3 мар 2008
    Сообщения:
    150
    Симпатии:
    27
    да мне нужно использовать переменную типа resource, но брать ее не с файла, а из строки.
    PHP:
    $img 'ыфвп'// строкой задается, не текст для отображения, а исходники картинки;
    $src_im = (resource)$img;
    int imagecopy resource dst_imresource src_imint dst_xint dst_yint src_xint src_yint src_wint src_h )
    или по другому:
    мне нужно получить содержимое файла http://site.ru/sign.png строкой. Чтобы не обращаться каждый раз к данному файлу, а просто сразу использовать его содержимое.
     
  4. upandhigh

    upandhigh

    Регистр.:
    11 фев 2009
    Сообщения:
    235
    Симпатии:
    89
    если пыха 5.1 или выше то можно сделать так:

    PHP:
    $fiveMBs 1024 1024// тут вместо этого место под размер картинки
    $fp fopen("php://memory/maxmemory:$fiveMBs"'r+'); 
    fputs($fp"hello\n"); // тут вместо текста - "картинка текстом" :D
    rewind($fp);

    и все в $fp у тебя стрим открытой ПНГ картинки дальше пихай в имедж функцию


     
    Monterpan нравится это.
  5. Monterpan

    Monterpan Постоялец

    Регистр.:
    3 мар 2008
    Сообщения:
    150
    Симпатии:
    27
    если использовать php://memory, а не php://temp , то выскакивают ошибки:
    Warning: fopen() [function.fopen]: Invalid php:// URL specified ...;
    Warning: fopen(php://memory/maxmemory:5242880) [function.fopen]: failed to open stream ...;
    Warning: fputs(:( supplied argument is not a valid stream resource in ...;
     
Статус темы:
Закрыта.