我正在尝试获取图像,但问题是我得到的东西不是所有图像,而且有些图像太小而无法看到。
def webService(url: String) = Action.async { implicit request =>
WS.url("http://" + url).get().map { response =>
val s = " src=\"" //src also on the jquery path
var all = response.body
var state = true
var set = Set[String]()
while (state) {
val ix = all.indexOf(s) + s.length();
var imageUrl = all.substring(ix, all.indexOf("\"", ix + 1))
all = all.substring(ix, all.length())
state = all.contains("<img") || all.contains("< img")
if (imageUrl.contains(".jpg")) {
set=set+(imageUrl.split(".jpg")(0)+".jpg")
} else if (imageUrl.contains(".jpeg")) {
set=set+(imageUrl.split(".jpeg")(0)+".jpeg")
} else if (imageUrl.contains(".png")){
set=set+(imageUrl.split(".png")(0)+".png")
}
}
Ok(views.html.webService("", url,set))
}
}
我想要所有尺寸的图像,所以我可以删除不需要的图像。
答案 0 :(得分:3)
要解析HTML,我会使用HTML解析器 - 类似jsoup。
import java.net.URL
import org.jsoup.Jsoup
import scala.collection.JavaConversions._
val timeout = 1000
val url = new URL("http://www.stackoverflow.com")
val imgTags = Jsoup.parse(url, timeout).select("img[src]").toList
val imgSources = imgTags.map(_.attributes.get("src"))
scala:> imgSources: List[String] = List(http://i.stack.imgur.com/tKsDb.png, ...
要获取图像的尺寸,可以使用javax.imageio.ImageIO:
case class ImageDimension(heigth: Int, width: Int)
def imageDimension(imageUrl: String): ImageDimension = {
import javax.imageio.ImageIO
import java.net.URL
val img = ImageIO.read(new URL(imageUrl))
ImageDimension(img.getHeight, img.getWidth)
}
scala> imageDimension("https://www.google.de/images/srpr/logo11w.png")
res0: ImageDimension = ImageDimension(190,538)