从其他网站获取图像

时间:2014-11-11 04:15:39

标签: image scala playframework web playframework-webservice

我正在尝试获取图像,但问题是我得到的东西不是所有图像,而且有些图像太小而无法看到。

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))
    }
}

我想要所有尺寸的图像,所以我可以删除不需要的图像。

  • 我正在使用带有scala
  • 的play framework 2.2

1 个答案:

答案 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)