我正在尝试将本地图像转换为Base64 字符串.我没有使用任何HTML,只需要在代码中引用图像路径的javascript.
例如,转换:
C:\Users\Work\Desktop\TestImage.jpg
Run Code Online (Sandbox Code Playgroud)
成
/9j/4AAQSkZJRgABAQEASABIAAD/4QBKRXhpZgAASUkqAAgAAAADABoBBQABAAAAMgAAABsBBQABAAAAOgAAACgBAwABAAAAAgAAAAAAAAAAVOoqgJaYAABU6iqAlpgA/+IMWElDQ19QUk9GSUxFAAEBAAAMSExpbm8CEAAAbW50clJHQiBYWVogB84AAgAJAAYAMQAAYWNzcE1TRlQAAAAASUVDIH.....etc...
Run Code Online (Sandbox Code Playgroud)
有很多这样的帖子,但他们似乎都以某种方式利用HTML,以便识别文件路径.我希望我能在 javascript中编写一个已定义的文件路径.
我试过这个无济于事:
function convertImgToBase64()
{
var canvas = document.createElement('CANVAS');
img = document.createElement('img'),
img.src = C:\Users\Work\Desktop\TestImage.jpg;
img.onload = function()
{
canvas.height = img.height;
canvas.width = img.width;
var dataURL = canvas.toDataURL('image/png');
alert(dataURL);
canvas = null;
};
}
Run Code Online (Sandbox Code Playgroud)
一个例子有以下html和javascript,但我希望这可以合并在一起.感谢您的支持
HTML:
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<input type='file' id="asd" />
<br>
<img id="img" src="//placehold.it/1x1/" />
<div id="base"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
function el(id){return document.getElementById(id);} // Get …Run Code Online (Sandbox Code Playgroud) 这里和这里已经有类似的问题,但是JVM参数的改变都没有引出我同样的解决方案.我只是想减少我的JVM未使用的堆大小,以便它更接近地反映实际使用情况(将其释放到操作系统).我一直在使用YourKit来分析内存使用情况,它通常如下所示:
我在Windows 7 64位,8 GB RAM上运行intellIj IDEA Community Edition 64位.我已经编辑了.vmoptions这里找到的文件:C:\Program Files (x86)\JetBrains\IntelliJ IDEA Community Edition 14.1.5\bin\idea64.exe.vmoptions上面链接中提到的建议.第一个链接的答案实际上是错误的/过时的,但是2条评论链接到这里和这里看起来很有希望的文章.问题是,我已经尝试了所提到的所有不同的垃圾收集器,并且仍然看到上面显示的类似(不相同)的堆大小.
如何减少分配的堆大小(橄榄绿)以更准确地反映实际使用情况(蓝色)?垃圾收集不应该降低堆大小,而不是像目前那样增加它.
我已经尝试配置我的idea64.exe.vmoptions如下:
根据上面的最后一个链接,它声称
只有Serial GC和G1将未使用的内存释放到OS
它甚至可以直观地显示堆的减少方式.然而,我没有运气,并尝试了以下所有方面:发生了什么?
-XX:+UseSerialGC
和
-XX:-UseSerialGC
和
-XX:+UseG1GC
Run Code Online (Sandbox Code Playgroud)
和
-XX:-UseG1GC
Run Code Online (Sandbox Code Playgroud)
和
Both of the above together, with and without ("+/-")
Run Code Online (Sandbox Code Playgroud)
和
-XX:-UseAdaptiveSizePolicy
-XX:-UseParallelGC
Run Code Online (Sandbox Code Playgroud)
和
-XX:UseConcMarkSweepGC
和
-Xms128m
-Xmx750m
-XX:MaxPermSize=350m
-XX:ReservedCodeCacheSize=225m
-XX:+UseG1GC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djsse.enableSNIExtension=false
Run Code Online (Sandbox Code Playgroud)
和
-server
-Xms128m
-Xmx512m
-XX:MaxPermSize=250m
-XX:ReservedCodeCacheSize=150m
-XX:UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
Run Code Online (Sandbox Code Playgroud)
编辑: …
以下正则表达式在此处测试时成功运行,但是当我尝试将其实现到我的 Java 代码中时,它不会返回匹配项。它使用负前瞻来确保MAIN LEVEL和之间不会出现换行符Bedrooms。为什么它在 Java 中不起作用?
正则表达式
^\s*\bMAIN LEVEL\b\n(?:(?!\n\n)[\s\S])*\bBedrooms:\s*(.*)
爪哇
pattern = Pattern.compile("^\\s*\\bMAIN LEVEL\\b\\n(?:(?!\\n\\n)[\\s\\S])*\\bBedrooms:\\s*(.*)");
match = pattern.matcher(content);
if(match.find())
{
//Doesn't reach here
String bed = match.group(1);
bed = bed.trim();
}
Run Code Online (Sandbox Code Playgroud)
content 只是从文本文件读取的字符串,其中包含上面链接的演示中显示的确切文本。
File file = new File("C:\\Users\\ME\\Desktop\\content.txt");
content = new Scanner(file).useDelimiter("\\Z").next();
Run Code Online (Sandbox Code Playgroud)
更新:
我更改了代码以包含多行修饰符(?m),但它打印出“null”。
pattern = Pattern.compile("(?m)^\\s*\\bMAIN LEVEL\\b\\n(?:(?!\\n\\n)[\\s\\S])*\\bBedrooms:\\s*(.*)");
match = pattern.matcher(content);
if(match.find())
{ // Still not reaching here
mainBeds=match.group(1);
mainBeds= mainBeds.trim();
}
System.out.println(mainBeds); // Prints null
Run Code Online (Sandbox Code Playgroud)