我写了一个从网络摄像头拍摄照片的bean。我想在JSF 2.0页面中显示这些图像,并且每隔n秒更新一次。
如果我在eclipse中给出路径名这样的文件就可以了:
public String getNewPhoto() {
try {
File dir = new File("C:/Users/User/MyApp/images/");
FileUtils.cleanDirectory(dir);
}catch(Exception ex) {
ex.printStackTrace();
}
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
try {
webcam = Webcam.getDefault();
webcam.open();
ImageIO.write(webcam.getImage(), "PNG", new File("C:/Users/User/MyApp/images/"+ timeStamp + ".png"));
webcam.close();
}catch(Exception ex) {
ex.printStackTrace();
}
return "C:/Users/User/MyApp/images/" + timeStamp + ".png";
}
使用以下XHTML:
<p:graphicImage value="#{myBean.newPhoto}" id="photo" cache="false" />
<p:poll interval="1" listener="#{myBean.increment}" update="photo" />
正如所期望的,以上所有的工作都可以在我的开发环境中完成eclipse。我想将它部署到我的服务器(Linux)。当我将路径从您上面看到的路径更改为
时的/ var / lib中/ tomcat7 / web应用/ MyApp的/图像
然后保存图像,但我无法在h:graphicImage中显示它们。我也试过传递:
http://hostname:8080/MyApp/images/....
到h:graphicImage并且仍然没有骰子,我确信我错过了一些非常简单的东西。任何帮助表示赞赏!
答案 0 :(得分:0)
您还需要在图像保存行中更改它。 。 。
ImageIO.write(webcam.getImage(), "PNG", new File("C:/Users/User/MyApp/images/"+ timeStamp + ".png"));
答案 1 :(得分:0)
以下内容如何:
查看强>
<p:graphicImage value="#{photoBean.newPhoto}" id="photo" cache="false" />
<p:poll listener="#{photoBean.updatePhoto}" interval="1"
update="photo" />
托管Bean
@ManagedBean
@RequestScoped
public class PhotoBean {
private String realPath;
private String realtivePath;
@PostConstruct
public void init() {
realtivePath = "/images/webcam.png";
ExternalContext externalContext = FacesContext.getCurrentInstance()
.getExternalContext();
realPath = externalContext.getRealPath(realtivePath);
}
public void updatePhoto() {
try {
File file = new File(realPath);
file.delete(); // cleanup
// Use file object to write image...
} catch (IOException e) {
// Implement some exception handling here
e.printStackTrace();
}
}
public String getNewPhoto() {
return realtivePath;
}
}
更多笔记(吸气剂)
在getter(getNewPhoto)中处理网络摄像头图像不是一个好主意,因为JSF可能会多次调用getter。
请参阅:Why JSF calls getters multiple times
<强>时间戳强>
我已从文件名中删除了时间戳。我认为您已添加它以防止浏览器缓存。这不是必需的,因为cache=false
已经创建了唯一的图像URI。