Картинка в памяти через запрос на сайт

#Kai-

Известный
Автор темы
705
292
Получаю запросом - тык

Lua:
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(0) end
        --Запрос
        asyncHttpRequest('GET', "http://test.loc/news.php", nil --[[Аргументы запроса]],
        function(response)
        NewsPict = response.text:match("<span class=\"news1\">(.+)</span>")
        end,
        function(err)
        end)
    while true do
    wait(0)
    end
end

Все как должно быть:

Lua:
imgui.OnInitialize(function()
    renderImage.News = imgui.CreateTextureFromFileInMemory(NewsPict, #NewsPict)
end)

Но картинка просто белая...


Картинка получается путем > тык
Если просто сохранять в самом скрипте все замечательно отображается
Сохранял в текстовик весь код картинки, соответствие 100%.
 

Вложения

  • news.zip
    5.7 KB · Просмотры: 9
Решение
D
как-то так
Lua:
local imgui = require 'mimgui'
local effil = require 'effil'

imgui.OnInitialize(function()
    logo = imgui.CreateTextureFromFileInMemory(_logo, #_logo)
end)

function asyncHttpRequest(method, url, args, resolve, reject)
   local request_thread = effil.thread(function (method, url, args)
      local requests = require 'requests'
      local result, response = pcall(requests.request, method, url, args)
      if result then
         response.json, response.xml = nil, nil
         return true, response
      else
         return false, response
      end
   end)(method, url, args)

   if not resolve then resolve = function() end end
   if not reject then reject = function() end end

   lua_thread.create(function()...
D

deleted-user-422095

Гость
как-то так
Lua:
local imgui = require 'mimgui'
local effil = require 'effil'

imgui.OnInitialize(function()
    logo = imgui.CreateTextureFromFileInMemory(_logo, #_logo)
end)

function asyncHttpRequest(method, url, args, resolve, reject)
   local request_thread = effil.thread(function (method, url, args)
      local requests = require 'requests'
      local result, response = pcall(requests.request, method, url, args)
      if result then
         response.json, response.xml = nil, nil
         return true, response
      else
         return false, response
      end
   end)(method, url, args)

   if not resolve then resolve = function() end end
   if not reject then reject = function() end end

   lua_thread.create(function()
      local runner = request_thread
      while true do
         local status, err = runner:status()
         if not err then
            if status == 'completed' then
               local result, response = runner:get()
               if result then
                  resolve(response)
               else
                  reject(response)
               end
               return
            elseif status == 'canceled' then
               return reject(status)
            end
         else
            return reject(err)
         end
         wait(0)
      end
   end)
end

url = 'https://www.digiseller.ru/preview/197847/p1_3078040_ede61368.jpg' -- прямая ссылка на картинку
asyncHttpRequest('GET', url, nil,
         function(response)
            _logo = response.text
         end,
         function(err)
            print('ERROR')
         end)
 
  • Нравится
Реакции: #Kai-

#Kai-

Известный
Автор темы
705
292
как-то так
Lua:
local imgui = require 'mimgui'
local effil = require 'effil'

imgui.OnInitialize(function()
    logo = imgui.CreateTextureFromFileInMemory(_logo, #_logo)
end)

function asyncHttpRequest(method, url, args, resolve, reject)
   local request_thread = effil.thread(function (method, url, args)
      local requests = require 'requests'
      local result, response = pcall(requests.request, method, url, args)
      if result then
         response.json, response.xml = nil, nil
         return true, response
      else
         return false, response
      end
   end)(method, url, args)

   if not resolve then resolve = function() end end
   if not reject then reject = function() end end

   lua_thread.create(function()
      local runner = request_thread
      while true do
         local status, err = runner:status()
         if not err then
            if status == 'completed' then
               local result, response = runner:get()
               if result then
                  resolve(response)
               else
                  reject(response)
               end
               return
            elseif status == 'canceled' then
               return reject(status)
            end
         else
            return reject(err)
         end
         wait(0)
      end
   end)
end

url = 'https://www.digiseller.ru/preview/197847/p1_3078040_ede61368.jpg' -- прямая ссылка на картинку
asyncHttpRequest('GET', url, nil,
         function(response)
            _logo = response.text
         end,
         function(err)
            print('ERROR')
         end)
Я не хочу чтобы картинка была у пользователя на пк, а хранилась в памяти.
Таким то способом легко сделать...
 
D

deleted-user-422095

Гость
а хранилась в памяти.
сразу в память загружает. Мусорщиком потом выгружается

print'ом проверь содержимое твоего ответа на запрос и того что выше скинул, и того который локальный(внесенный вручную в .lua)
 

#Kai-

Известный
Автор темы
705
292
сразу в память загружает. Мусорщиком потом выгружается

print'ом проверь содержимое твоего ответа на запрос и того что выше скинул, и того который локальный(внесенный вручную в .lua)
Я не правильно понял изначально, думал она загружает...
Сейчас тестирую...
 

#Kai-

Известный
Автор темы
705
292
сразу в память загружает. Мусорщиком потом выгружается

print'ом проверь содержимое твоего ответа на запрос и того что выше скинул, и того который локальный(внесенный вручную в .lua)
Она тупо ругается " attempt to get length of global '_logo'"
На renderImage.News = imgui.CreateTextureFromFileInMemory(_logo, #_logo)
 

#Kai-

Известный
Автор темы
705
292
сразу в память загружает. Мусорщиком потом выгружается

print'ом проверь содержимое твоего ответа на запрос и того что выше скинул, и того который локальный(внесенный вручную в .lua)
Я сравнивал, у принта не все отображается, сохранял отдельно в txt файл и проверял код, 100% идентичный, но картинка тупо белая.
 

#Kai-

Известный
Автор темы
705
292
сразу в память загружает. Мусорщиком потом выгружается

print'ом проверь содержимое твоего ответа на запрос и того что выше скинул, и того который локальный(внесенный вручную в .lua)
нее, я пиваса уже подвыпил, туплю.
Каким образом прямая ссылка на картинку может загружаться в память, скачай news.php мой и посмотри, что и как...
Протестил ответ от твоего запроса, "яШяа"
 
D

deleted-user-422095

Гость
Я сравнивал, у принта не все отображается, сохранял отдельно в txt файл и проверял код, 100% идентичный, но картинка тупо белая.
Lua:
local imgui = require 'mimgui'
local vkeys = require 'vkeys'

local wm = require 'windows.message'
local new = imgui.new

local effil = require 'effil'

local renderWindow = new.bool()
local sizeX, sizeY = getScreenResolution()

imgui.OnInitialize(function()  

    imgui.GetIO().IniFilename = nil
   
    logo = imgui.CreateTextureFromFileInMemory(_logo, #_logo)
   
end)

local newFrame = imgui.OnFrame(
    function() return renderWindow[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 2, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(500, 600), imgui.Cond.FirstUseEver)
        imgui.Begin("Main Window", renderWindow)
        imgui.Text("Hello")
        imgui.Text(string.format("Current render mode: %s", renderWindow[0]))
       
        imgui.Image(logo, imgui.ImVec2(426, 533))
       
        imgui.End()
    end
)

function main()
    addEventHandler('onWindowMessage', function(msg, wparam, lparam)
        if msg == wm.WM_KEYDOWN or msg == wm.WM_SYSKEYDOWN then
            if wparam == vkeys.VK_X then
                renderWindow[0] = not renderWindow[0]
            end
        end
    end)
    wait(-1)
end

    function asyncHttpRequest(method, url, args, resolve, reject)
        local request_thread = effil.thread(function (method, url, args)
            local requests = require 'requests'
            local result, response = pcall(requests.request, method, url, args)
            if result then
                response.json, response.xml = nil, nil
                return true, response
            else
                return false, response
            end
        end)(method, url, args)
        -- Если запрос без функций обработки ответа и ошибок.
        if not resolve then resolve = function() end end
        if not reject then reject = function() end end
        -- Проверка выполнения потока
        lua_thread.create(function()
            local runner = request_thread
            while true do
            local status, err = runner:status()
            if not err then
                if status == 'completed' then
                    local result, response = runner:get()
                    if result then
                        resolve(response)
                    else
                        reject(response)
                    end
                    return
                elseif status == 'canceled' then
                    return reject(status)
                end
            else
                return reject(err)
            end
            wait(0)
            end
        end)
    end

    asyncHttpRequest('GET', 'https://i.pinimg.com/originals/ae/e6/0c/aee60cdc0cb3726f3634d51d792845fa.jpg', nil,
        function(response)
            _logo = response.text
        end,
        function(err)
        print('ERROR, ссылка невалидна')
        end)
фулл код
 
  • Нравится
Реакции: #Kai-
D

deleted-user-422095

Гость
Каким образом прямая ссылка на картинку может загружаться в память, скачай news.php мой и посмотри, что и как...
в .php просто текстом копирует, я не ебу как объяснить, но просто текст не читает
 

#Kai-

Известный
Автор темы
705
292
Lua:
local imgui = require 'mimgui'
local vkeys = require 'vkeys'

local wm = require 'windows.message'
local new = imgui.new

local effil = require 'effil'

local renderWindow = new.bool()
local sizeX, sizeY = getScreenResolution()

imgui.OnInitialize(function() 

    imgui.GetIO().IniFilename = nil
  
    logo = imgui.CreateTextureFromFileInMemory(_logo, #_logo)
  
end)

local newFrame = imgui.OnFrame(
    function() return renderWindow[0] end,
    function(player)
        imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 2, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(500, 600), imgui.Cond.FirstUseEver)
        imgui.Begin("Main Window", renderWindow)
        imgui.Text("Hello")
        imgui.Text(string.format("Current render mode: %s", renderWindow[0]))
      
        imgui.Image(logo, imgui.ImVec2(426, 533))
      
        imgui.End()
    end
)

function main()
    addEventHandler('onWindowMessage', function(msg, wparam, lparam)
        if msg == wm.WM_KEYDOWN or msg == wm.WM_SYSKEYDOWN then
            if wparam == vkeys.VK_X then
                renderWindow[0] = not renderWindow[0]
            end
        end
    end)
    wait(-1)
end

    function asyncHttpRequest(method, url, args, resolve, reject)
        local request_thread = effil.thread(function (method, url, args)
            local requests = require 'requests'
            local result, response = pcall(requests.request, method, url, args)
            if result then
                response.json, response.xml = nil, nil
                return true, response
            else
                return false, response
            end
        end)(method, url, args)
        -- Если запрос без функций обработки ответа и ошибок.
        if not resolve then resolve = function() end end
        if not reject then reject = function() end end
        -- Проверка выполнения потока
        lua_thread.create(function()
            local runner = request_thread
            while true do
            local status, err = runner:status()
            if not err then
                if status == 'completed' then
                    local result, response = runner:get()
                    if result then
                        resolve(response)
                    else
                        reject(response)
                    end
                    return
                elseif status == 'canceled' then
                    return reject(status)
                end
            else
                return reject(err)
            end
            wait(0)
            end
        end)
    end

    -- all.lua
    asyncHttpRequest('GET', 'https://i.pinimg.com/originals/ae/e6/0c/aee60cdc0cb3726f3634d51d792845fa.jpg', nil,
        function(response)
            _logo = response.text
        end,
        function(err)
        print('ERROR, ссылка невалидна')
        end)
фулл код
Хм.... Спасибо, будем разбираться что не так...
Это все хорошо грузит.
 

#Kai-

Известный
Автор темы
705
292
в .php просто текстом копирует, я не ебу как объяснить, но просто текст не читает
пиздец какой-то.
Тупо твой код вставляю в свой скрипт и ошибка как выше xD
А в отдельном файле твой код работает...
 
D

deleted-user-422095

Гость
Так говорю, все что у тебя, тупо CTRL + V/CTRL + C
Просто в отдельном lua работает, пихаю в свой скрипт нет.
Даже очередность функций такая же...
Хз тогда, не видя, говорить сложно
Может кто другой поможет.

Как вариант библиотеки effil и requests могут быть кривые, перекачай
 
  • Нравится
Реакции: #Kai-