当前位置: 首页 > 编程语言 > C#

通过在线源共享在移动设备上统一保存图像

时间:2023-04-11 00:35:30 C#

通过在线源在移动设备上统一保存图像主要目标:从在线url加载图像,然后在本地移动设备上的/Repo/{VenueName}目录中保存图像(任何类型)。这会在场景加载时保存未来的移动数据,首先检查本地图像,然后调用www请求(如果它尚未出现在移动设备上)。我已经在线获取了图像,我已经从json文件中提取了url,现在我想将它们存储在本地移动设备上,以便为最终用户保存数据传输。我绕过持久数据路径和IO.directories并继续遇到问题。目前我有一个功能可以从网上保存文本并成功将其存储在设备上,但是如果我将它用于图像,它将无法工作,因为下面显示的字符串参数,我正在尝试将其转换为字节编辑功能也没有传递它www.text和获取图像损坏错误。这是我用于文本保存文件的旧功能。publicvoidwriteStringToFile(stringstr,stringfilename){#if!WEB_BUILDstringpath=pathForDocumentsFile(filename);FileStreamfile=newFileStream(path,FileMode.Create,FileAccess.Write);StreamWritersw=newStreamWriter(文件);sw.WriteLine(海峡);sw.Close();文件.关闭();#endif}publicstringpathForDocumentsFile(stringfilename){if(Application.platform==RuntimePlatform.IPhonePlayer){stringpath=Application.dataPath.Substring(0,Application.dataPath.Length-5);path=path.Substring(0,path.LastIndexOf('/'));返回Path.Combine(Path.Combine(路径,"文件"),文件名);}elseif(Application.platform==RuntimePlatform.Android){stringpath=Application.persistentDataPath;path=path.Substring(0,path.LastIndexOf('/'));返回Path.Combine(路径,文件名);}else{字符串路径=Application.dataPath;path=path.Substring(0,path.LastIndexOf('/'));返回Path.Combine(路径,文件名);}}这适用于文本,因为它需要一个字符串,但无论我编辑多少,我都无法让它在图像上工作我最终走了一条不同的路线,但以下代码存在未经授权的访问问题,并认为它不适用于移动设备设备但是...IEnumeratorloadPic(WWWwww,stringthefile,stringfolder){yieldreturnwww;stringvenue=Application.persistentDataPath+文件夹;stringpath=Application.persistentDataPath+文件夹+"/"+文件;if(!System.IO.Directory.Exists(venue)){System.IO.Directory.CreateDirectory(venue);}if(!System.IO.Directory.Exists(path)){System.IO.Directory.CreateDirectory(path);}系统。IO.File.WriteAllBytes(path,www.bytes);呃,现在是凌晨3点,我想不通,你们能帮帮我吗?提前致谢。我尝试将它转换为字节编辑函数,而不是将其传递给www.text,结果出现图像损坏错误,这可能是90%问题的原因。WWW.text用于非二进制数据,例如简单文本。1.使用WWW.bytes而不是WWW.text下载图片或文件。2.使用File.WriteAllBytes保存图像。3.使用File.ReadAllBytes读取图像。4.使用Texture2D.LoadImage(yourImageByteArray);图像被加载到纹理中Texture2D.LoadImage(yourImageByteArray);5.如果你想让这个路径兼容所有平台,你的路径必须是Application.persistentDataPath/yourfolderName/thenFileName。它不应是Application.persistentDataPath/yourFileName或Application.dataPath。6.最后,使用Debug.Log查看代码中发生了什么。您必须或至少使用调试器。您需要确切地知道您的代码在哪里失败。您仍然需要执行一些错误检查。publicvoiddownloadImage(stringurl,stringpathToSaveImage){WWWwww=newWWW(url);StartCoroutine(_downloadImage(www,pathToSaveImage));}privateIEnumerator_downloadImage(WWWwww,stringsavePath){yieldreturnwww;//检查我们是否发送失败if(string.IsNullOrEmpty(www.error)){UnityEngine.Debug.Log("Success");//保存图片saveImage(savePath,www.bytes);}else{UnityEngine.Debug.Log("错误:"+www.error);}}voidsaveImage(stringpath,byte[]imageBytes){//如果目录不存在则创建目录if(!Directory.Exists(Path.GetDirectoryName(path))){Directory.CreateDirectory(Path.GetDirectoryName(path));}尝试{File.WriteAllBytes(path,imageBytes);Debug.Log("保存数据到:"+path.Replace("/","\"));}catch(Exceptione){Debug.LogWarning("无法将数据保存到:"+path.Replace("/","\"));Debug.LogWarning("错误:"+e.Message);}}byte[]loadImage(字符串路径){byte[]dataByte=null;//如果是目录或文件则退出如果(!Directory.Exists(Path.GetDirectoryName(path))){Debug.LogWarning("Directorydoesnotexist");不存在返回空值;}if(!File.Exists(path)){Debug.Log("文件不存在");返回空值;}try{dataByte=File.ReadAllBytes(path);Debug.Log("加载数据来自:"+path.Replace("/","\"));}catch(Exceptione){Debug.LogWarning("加载数据失败:"+path.Replace("/","\"));Debug.LogWarning("错误:"+e.Message);}返回数据字节;}用法:准备用于下载图像的url并保存到://Fileurlstringurl="http://sofzh.miximages.com/c%23/Cool-Wallpaper-11C4.jpg";//保存路径stringsavePath=Path.Combine(Application.persistentDataPath,"data");savePath=Path.Combine(savePath,"图像");savePath=Path.Combine(savePath,"标志");正如你所看到的,不需要将图像扩展名(png,jpg)添加到保存路径,你也不应该将图像扩展名添加到保存路径,如果你不这样做,这样会更容易加载。知道分机。只要图像是png或jpg图像格式,它就应该可以工作。下载文件:downloadImage(url,savePath);从文件加载图像:byte[]imageBytes=loadImage(savePath);将图像放入Texture2D:以上是C#学习教程:通过网络资源将图像分享的全部内容保存在手机端,如果对你有用还需要了解更多C#学习教程,希望大家付费更多关注——Texture2D纹理;纹理=新的Texture2D(2,2);texture.LoadImage(imageBytes);本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: