Só baixar a imagem se ela ainda não existir
3 participantes
Página 1 de 1
Só baixar a imagem se ela ainda não existir
Oi gente, tudo bem?
Então, tô com um probleminha que vai fazer 3 dias já. Procurei por TUDO no google e não consegui achar muita coisa. (dentre as que achei, nada resolveu), que é o seguinte. Eu tenho um script que troca uma raw.imagem por uma texture que foi baixado na internet, mas, eu estou tentando fazer ele só baixar, se ela ainda não existir, e, quando ele baixar, gravar ela pra não precisar mais usar a internet.
Detalhe: tô fazendo o "void apertar()" abrir o site onde está a imagem, mas no lugar disso, queria que ele apenas salvasse a imagem que está na rawImage também.
Enfim, se alguém puder me ajudar, muuuuito obrigado!
E se preferir, pode me contatar de qualquer modo [url=otavio.tk/comtato.html]aqui[/url] também...
Então, tô com um probleminha que vai fazer 3 dias já. Procurei por TUDO no google e não consegui achar muita coisa. (dentre as que achei, nada resolveu), que é o seguinte. Eu tenho um script que troca uma raw.imagem por uma texture que foi baixado na internet, mas, eu estou tentando fazer ele só baixar, se ela ainda não existir, e, quando ele baixar, gravar ela pra não precisar mais usar a internet.
Detalhe: tô fazendo o "void apertar()" abrir o site onde está a imagem, mas no lugar disso, queria que ele apenas salvasse a imagem que está na rawImage também.
Enfim, se alguém puder me ajudar, muuuuito obrigado!
E se preferir, pode me contatar de qualquer modo [url=otavio.tk/comtato.html]aqui[/url] também...
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class ImageDownloader : MonoBehaviour {
public RawImage img;
public string url;
public int moeda;
// aqui é um botão que quando apertado, se tiver 10 moedas, abre a imagem no navegador (no lugar disso, queria que ele apenas baixasse
// a imagem que esta no "RawImage"...
public void apertar(){
if (moeda < 10){
Application.OpenURL("http://" + url);
}
}
IEnumerator Start () {
// aqui ele vê quantas moedas o jogador possui
moeda = PlayerPrefs.GetInt("moeda");
// aqui ele faz o download da imagem
WWW www = new WWW(url);
yield return www;
img.texture = www.texture;
}
}
Re: Só baixar a imagem se ela ainda não existir
Erros de digitação corrigidos:
* otavio.tk/contato.html
**if (moeda > 10){
* otavio.tk/contato.html
**if (moeda > 10){
Re: Só baixar a imagem se ela ainda não existir
Você já tentou fazer por bool? Não entendi direito o que você quer: Verificar se o player baixou ou pegar a imagem?
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Só baixar a imagem se ela ainda não existir
Souris escreveu:Você já tentou fazer por bool? Não entendi direito o que você quer: Verificar se o player baixou ou pegar a imagem?
Eu quero que ele pegue a imagem que ele baixou, e a salve para não precisar baixar de novo.
Esqueci de colocar no tópico, mas eu pensei também em tentar salvar a cena, assim, quando for aberta, as imagens já estariam salvas, mas também não achei muito sobre como fazer isso...
Re: Só baixar a imagem se ela ainda não existir
Eu achei na internet um script que faz o que eu tô querendo. O problema, é que não sei como aplicar essas funções no meu script.
- Código:
using UnityEngine;
using System.Collections;
using System.IO;
public class falsinho : MonoBehaviour {
// Use this for initialization
IEnumerator Start () {
if(File.Exists(Application.persistentDataPath + "testTexture.jpg")){
print("Loading from the device");
byte[] byteArray = File.ReadAllBytes(Application.persistentDataPath + "testTexture.jpg");
Texture2D texture = new Texture2D(8,8);
texture.LoadImage(byteArray);
this.GetComponent<Renderer>().material.mainTexture = texture;
}
else {
print("Downloading from the web");
WWW www = new WWW("https://lh3.googleusercontent.com/UWjhYQauLwmEh2DNyej--iXJMqIkRM5811suN1u5GgGz6JUxsDiCNV84LVxvHTz8L1dZMw=s85");
yield return www;
Texture2D texture = www.texture;
this.GetComponent<Renderer>().material.mainTexture = texture;
byte[] bytes = texture.EncodeToJPG();
File.WriteAllBytes(Application.persistentDataPath + "testTexture.jpg", bytes);
}
}
}
Re: Só baixar a imagem se ela ainda não existir
Eu recomendo que você rode esse Script na Awake, daí não vai ter um tempo de espera. Como o Awake não aceita IEnumerator, faça uma IEnumerator sendo chamado na Awake. Tendeu?
(Você não conseguiu fazer o request ou o q?)
(Você não conseguiu fazer o request ou o q?)
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Só baixar a imagem se ela ainda não existir
Não consegui fazer ele baixar a imagem que tá sendo carregada na textura. Porque do jeito que tá (o primeiro), toda vez que carregar a cena vai ter que baixar as imagens, e só queria que fizesse como o segundo faz.Souris escreveu:Eu recomendo que você rode esse Script na Awake, daí não vai ter um tempo de espera. Como o Awake não aceita IEnumerator, faça uma IEnumerator sendo chamado na Awake. Tendeu?
(Você não conseguiu fazer o request ou o q?)
Re: Só baixar a imagem se ela ainda não existir
Pelo que vi, não. Ele verifica se o arquivo existe, e caso não, baixa, senão, carrega a imagem. Não entendo qual o problema.
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Só baixar a imagem se ela ainda não existir
Achei este artigo, e resolveu para algumas pessoas, verifique se é o mesmo caso.
https://answers.unity.com/questions/858245/save-and-load-texture-with-systemio-filestream.html
:D
https://answers.unity.com/questions/858245/save-and-load-texture-with-systemio-filestream.html
:D
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Só baixar a imagem se ela ainda não existir
O problema é que esse não é o meu, o meu é o de cima e não tô sabendo colocar a função de verificar se o arquivo existe, e se sim: baixa a imagem, se não: carrega dos arquivosSouris escreveu:Pelo que vi, não. Ele verifica se o arquivo existe, e caso não, baixa, senão, carrega a imagem. Não entendo qual o problema.
Re: Só baixar a imagem se ela ainda não existir
Souris escreveu:Achei este artigo, e resolveu para algumas pessoas, verifique se é o mesmo caso.
https://answers.unity.com/questions/858245/save-and-load-texture-with-systemio-filestream.html
:D
Eu já tinha tentado isso e não consegui mesclar ao meu também... =(
Re: Só baixar a imagem se ela ainda não existir
Ele faz verificação nessa linha:
Agora, não entendi os outros. O código você mesmo já disse. Você não conseguiu entender o que acontece e queria uma explicação?
- Código:
if(File.Exists(Application.persistentDataPath + "testTexture.jpg")){
}else{
}
Agora, não entendi os outros. O código você mesmo já disse. Você não conseguiu entender o que acontece e queria uma explicação?
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Só baixar a imagem se ela ainda não existir
Souris escreveu:Ele faz verificação nessa linha:
- Código:
if(File.Exists(Application.persistentDataPath + "testTexture.jpg")){
}else{
}
Agora, não entendi os outros. O código você mesmo já disse. Você não conseguiu entender o que acontece e queria uma explicação?
Queria saber o que devo colocar no lugar de "textTexture.jpg", agora.
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Só baixar a imagem se ela ainda não existir
Mas não são só um arquivo, são vários...Souris escreveu:O nome do seu arquivo
É assim que tá meu script agora, mas ainda tá dando quatro erros:
- Código:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.IO;
public class ImageDownloader : MonoBehaviour {
public RawImage img;
public string url;
public int moeda;
public void apertar(){
if (moeda < 10){
Application.OpenURL("http://" + url);
}
}
IEnumerator Start () {
moeda = PlayerPrefs.GetInt("moeda");
if(File.Exists(Application.persistentDataPath + url + ".jpg")){
byte[] byteArray = File.ReadAllBytes(Application.persistentDataPath + "testTexture.jpg");
img.LoadImage(byteArray);
this.GetComponent<Renderer>().material.mainTexture = img;
}
else{
WWW www = new WWW(url);
yield return www;
img.texture = www.texture;
this.GetComponent<Renderer>().material.mainTexture = img;
byte[] bytes = img.EncodeToJPG();
File.WriteAllBytes(Application.persistentDataPath + url + ".jpg", bytes);
}
}
}
- Código:
ImageDownloader.cs(24,8): error CS1929: Type `UnityEngine.UI.RawImage' does not contain a member `LoadImage' and the best extension method overload `UnityEngine.ImageConversion.LoadImage(this UnityEngine.Texture2D, byte[])' requires an instance of type `UnityEngine.Texture2D'
ImageDownloader.cs(25,57): error CS0029: Cannot implicitly convert type `UnityEngine.UI.RawImage' to `UnityEngine.Texture'
ImageDownloader.cs(32,62): error CS0029: Cannot implicitly convert type `UnityEngine.UI.RawImage' to `UnityEngine.Texture'
ImageDownloader.cs(33,28): error CS1929: Type `UnityEngine.UI.RawImage' does not contain a member `EncodeToJPG' and the best extension method overload `UnityEngine.ImageConversion.EncodeToJPG(this UnityEngine.Texture2D)' requires an instance of type `UnityEngine.Texture2D'
Re: Só baixar a imagem se ela ainda não existir
@UP
Pelo o que parece, eu estou fazendo um processo que só é aceitável caso esteja lidando com uma textura, e o meu script está lidando com uma "Rawimage"...
Pelo o que parece, eu estou fazendo um processo que só é aceitável caso esteja lidando com uma textura, e o meu script está lidando com uma "Rawimage"...
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Só baixar a imagem se ela ainda não existir
Poderia, se eu soubesse como...Souris escreveu:Você não pode utilizar uma Image comum?
Re: Só baixar a imagem se ela ainda não existir
Simples man, é igual como você cria o RawImage, porém vc só coloca o Image
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Só baixar a imagem se ela ainda não existir
E então aquele script ali não vai mais apresentar aqueles erros?Souris escreveu:Simples man, é igual como você cria o RawImage, porém vc só coloca o Image
Re: Só baixar a imagem se ela ainda não existir
Em teoria, pois o RawImage não tem .sprite, mas o Image tem
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Só baixar a imagem se ela ainda não existir
caso ainda esteja com o problema, deve ser o caminho da pasta para salvar o arquivo
File.WriteAllBytes(Application.persistentDataPath + "testTexture.jpg", bytes);
testTexture.jpg é o nome do arquivo, precisa por / entre caminho e nome
exemplo
File.WriteAllBytes(Application.persistentDataPath + "/" + "testTexture.jpg", bytes);
testei e funcionou, tirando que no meu projeto não baixou de jeito nenhum, ao invés da imagem aparece uma ?
porem salvou o arquivo, a ?
sem separar o caminho por / não acha o caminho para escrever o arquivo, portanto não escreve
File.WriteAllBytes(Application.persistentDataPath + "testTexture.jpg", bytes);
testTexture.jpg é o nome do arquivo, precisa por / entre caminho e nome
exemplo
File.WriteAllBytes(Application.persistentDataPath + "/" + "testTexture.jpg", bytes);
testei e funcionou, tirando que no meu projeto não baixou de jeito nenhum, ao invés da imagem aparece uma ?
porem salvou o arquivo, a ?
sem separar o caminho por / não acha o caminho para escrever o arquivo, portanto não escreve
pablom64- Iniciante
- PONTOS : 2975
REPUTAÇÃO : 0
Respeito as regras :
Tópicos semelhantes
» [TUTORIAL] Baixar e aplicar texturas em tempo de execução! Agora salva a imagem no pc do usuario!
» Imagem VR Quest 2 Screenshot - Salvar a imagem no VR
» Será que um dia,vai existir uma versão em PT-BR da unity?
» Como retornar "false" se um objeto não existir?
» Ainda Não Resolvido
» Imagem VR Quest 2 Screenshot - Salvar a imagem no VR
» Será que um dia,vai existir uma versão em PT-BR da unity?
» Como retornar "false" se um objeto não existir?
» Ainda Não Resolvido
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos