【问题标题】:What is the best Scala library for writing/reading PNG image files?用于编写/读取 PNG 图像文件的最佳 Scala 库是什么?
【发布时间】:2020-05-30 03:28:02
【问题描述】:

编写/读取 PNG 图像文件的最佳 Scala 库是什么?我正在寻找 libpng (c++) 和 pypng (Python) 的 Scala 等效项

【问题讨论】:

  • 可能是一个 Java 库,而不是 Scala 特有的东西(虽然我不确定后者不存在)
  • 最好在 redditgitter 中询问。

标签: image scala file png media


【解决方案1】:

由于java库可以在scala中使用;所以你可以使用 java 库 [javax imageIO] 或 [java awt] 或两者。你可以在互联网上找到很多他们的例子。我在这里分享一个。

以下是相同的示例代码。

import org.opencv.core.Mat
import javax.imageio.ImageIO
import java.io.ByteArrayInputStream
import java.awt.image.DataBufferByte
import org.opencv.core.CvType
import org.opencv.core.Core
import org.opencv.features2d.FeatureDetector
import org.opencv.core.MatOfKeyPoint
import org.opencv.features2d.Features2d
import org.opencv.highgui.Highgui
import java.awt.image.BufferedImage
import java.io.File



object OpenCVOps {

  System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

  def imageToMat(byteArray: Array[Byte]): MatSer ={
      val bufferedImage = ImageIO.read(new ByteArrayInputStream(byteArray))
      val mat = new Mat(bufferedImage.getHeight(), bufferedImage.getWidth(), CvType.CV_8UC3);
      val data = bufferedImage.getRaster().getDataBuffer.asInstanceOf[DataBufferByte].getData();
      mat.put(0, 0, data);
      new MatSer(mat);
  }

  def matToImage(mat: Mat,file: String): Boolean ={

      val imageType = BufferedImage.TYPE_3BYTE_BGR;
      val image = new BufferedImage(mat.cols(),mat.rows(), imageType);
      val x = image.getRaster.getDataBuffer.asInstanceOf[DataBufferByte].getData
      mat.get(0,0,x)
      val fileName = new File("file")
      ImageIO.write(image, "jpg", fileName)

  }

  def detectFeatures(mat: Mat)
  {
    val featureDetector = FeatureDetector.create(FeatureDetector.SIFT)
    val matKeyPoint = new MatOfKeyPoint()
    featureDetector.detect(mat,matKeyPoint)
    println(mat.get(0, 0))
    println(matKeyPoint.toList())
    //writeToImage(mat,matKeyPoint)

  }

  def writeToImage(mat: Mat, matKeyPoint: MatOfKeyPoint){
    val outImage = new Mat()
    Features2d.drawKeypoints(mat, matKeyPoint, outImage)
    Highgui.imwrite("myfile.jpg",outImage)

  }

} 

这里还有一个例子..

import javax.imageio.ImageIO

trait Settings {
  this: com.jme3.app.SimpleApplication =>

  protected val appSettings = new com.jme3.system.AppSettings(true)

  Seq(
    ("Width", 1920)
    , ("Height", 1080)
    , ("BitsPerPixel", 32)
    , ("Frequency", 60)
    , ("DepthBits", 24)
    , ("StencilBits", 0)
    , ("Samples", 2)
    , ("Fullscreen", false)
    , ("Title", "LW3D")
    , ("Renderer", com.jme3.system.AppSettings.LWJGL_OPENGL2)
    , ("AudioRenderer", com.jme3.system.AppSettings.LWJGL_OPENAL)
    , ("DisableJoysticks", true)
    , ("UseInput", true)
    , ("VSync", false)
    , ("FrameRate", 0)
    , ("SettingsDialogImage", "")
    , ("MinHeight", 1920)
    , ("MinWidth", 1080)
  ) foreach { case (k, v: Object) => appSettings.put(k, v) }

  appSettings.setIcons(
    List(
      ImageIO.read(getClass.getClassLoader.getResource("Yx/logo/Y256.png")),
      ImageIO.read(getClass.getClassLoader.getResource("Yx/logo/Y128.png")),
      ImageIO.read(getClass.getClassLoader.getResource("Yx/logo/Y64.png")),
      ImageIO.read(getClass.getClassLoader.getResource("Yx/logo/Y32.png")),
      ImageIO.read(getClass.getClassLoader.getResource("Yx/logo/Y16.png"))
    ).toArray
  )

  setSettings(appSettings)

  setShowSettings(false)
  setDisplayFps(true)
  setDisplayStatView(false)
  setPauseOnLostFocus(false)
} 

【讨论】:

    猜你喜欢
    • 2011-06-21
    • 2012-07-14
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    相关资源
    最近更新 更多