最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang?實現(xiàn)?pdf?轉高清晰度?jpeg的處理方法

 更新時間:2022年10月08日 11:26:31   作者:皿小草  
這篇文章主要介紹了golang?實現(xiàn)?pdf?轉高清晰度?jpeg,下面主要介紹Golang 代碼使用方法及Golang PDF轉JPEG的詳細代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

ImageMagick 是一個功能豐富的圖片處理工具

具體安裝方式可以參考官方,MacOS 上可以通過 homebrew 安裝

brew install imagemagick@6

homebrew 最新的源是 7.* 版本,由于我的場景需要在 linux 部署,linux 的 apt 源目前是 6.9, 為了保持一致,所以使用的是舊版本

命令行使用

convert -density 128 1.pdf -quality 100 -alpha remove output.jpeg

Golang 代碼使用

核心要點:

pdf 需要去除 alpha 通道,然后背景色設置白色(你可以可以根據(jù)需求設置其它顏色)留意內存泄露,因為這是 cgo,一旦泄露就 gg 了。比如你沒有 mw.RemoveImage()上述的 density 設置就是 resolution, 需要設置一個合理的值,否則轉換的圖片就會糊

golang 的 binding 安裝方式可以按照 github 介紹 https://github.com/gographics/imagick

package main

import (
	"fmt"
	"io/ioutil"
	"runtime"
	"runtime/debug"
	"time"

	"gopkg.in/gographics/imagick.v2/imagick"
)

func main() {
	imagick.Initialize()
	//defer imagick.Terminate()
	data, _ := ioutil.ReadFile("1.pdf")

	start := time.Now()
	for i := 0; i < 100; i++ {
		if i%10 == 0 {
			fmt.Println("i", i)
		}
		go createCoverImage(data, "1-1.jpeg")
	}
	fmt.Println("duration", time.Now().Sub(start))
	PrintMemUsage()
	debug.FreeOSMemory()
	PrintMemUsage()
	time.Sleep(10 * time.Second)
	imagick.Terminate()
	fmt.Println("free cgo")
	PrintMemUsage()
	time.Sleep(10 * time.Minute)
}

// PrintMemUsage outputs the current, total and OS memory being used. As well as the number
// of garage collection cycles completed.
func PrintMemUsage() {
	var m runtime.MemStats
	runtime.ReadMemStats(&m)
	// For info on each, see: https://golang.org/pkg/runtime/#MemStats
	fmt.Printf("Alloc = %v MiB", bToMb(m.Alloc))
	fmt.Printf("\tTotalAlloc = %v MiB", bToMb(m.TotalAlloc))
	fmt.Printf("\tSys = %v MiB", bToMb(m.Sys))
	fmt.Printf("\tNumGC = %v\n", m.NumGC)
}

func bToMb(b uint64) uint64 {
	return b / 1024 / 1024
}

func clearImagickWand(mw *imagick.MagickWand) {
	mw.RemoveImage()
	mw.Clear()
	mw.Destroy()
	//runtime.SetFinalizer(mw, nil)
	mw = nil
}

func createCoverImage(data []byte, coverPathName string) bool {
	//sourceImagePath := getSourceImageForCover(filepath.Dir(pathNoExtension))
	mw := imagick.NewMagickWand()
	defer clearImagickWand(mw)
	mw.SetResolution(192, 192)
	err := mw.ReadImageBlob(data)
	if err != nil {
		return false
	}

	//length := mw.GetImageIterations()
	//fmt.Println("length", length)
	//fmt.Println("width", mw.GetImageWidth())
	//fmt.Println("height", mw.GetImageHeight())

	pix := imagick.NewPixelWand()
	pix.SetColor("white")
	//mw.SetBackgroundColor(pix)
	mw.SetImageAlphaChannel(imagick.ALPHA_CHANNEL_REMOVE)
	mw.SetImageFormat("jpeg")

	err = mw.WriteImage(coverPathName)
	if err != nil {
		return false
	}
	_ = mw.GetImageBlob()

	return true
}

特別地,需要設置兩個環(huán)境變量

export CGO_CFLAGS_ALLOW='-Xpreprocessor'
export PKG_CONFIG_PATH="/usr/local/opt/imagemagick@6/lib/pkgconfig" # 取決于 brew install 的輸出

Golang PDF轉JPEG

package main

import (
	"fmt"
	"os"

	"github.com/h2non/bimg"
)

func main() {
	buffer, err := bimg.Read("test.pdf")
	if err != nil {
		fmt.Fprintln(os.Stderr, err)
	}

	newImage, err := bimg.NewImage(buffer).Convert(bimg.JPEG)
	if err != nil {
		fmt.Fprintln(os.Stderr, err)
	}

	if bimg.NewImage(newImage).Type() == "jpeg" {
		fmt.Fprintln(os.Stderr, "The image was converted into jpeg")
	}

	bimg.Write("test.jpg", newImage)
}

到此這篇關于golang 實現(xiàn) pdf 轉高清晰度 jpeg的文章就介紹到這了,更多相關golang pdf 轉高清晰度 jpeg內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 優(yōu)雅管理Go?Project生命周期

    優(yōu)雅管理Go?Project生命周期

    這篇文章主要為大家介紹了如何優(yōu)雅的管理Go?Project生命周期,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Go?defer?去掉閉包函數(shù)及用法分析

    Go?defer?去掉閉包函數(shù)及用法分析

    這篇文章主要為大家介紹了Go?defer?去掉閉包函數(shù)及用法分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Go遞歸修改文件名的實例代碼

    Go遞歸修改文件名的實例代碼

    這篇文章主要介紹了Go遞歸修改文件名的實例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的餓參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 在Go語言開發(fā)中實現(xiàn)高性能的分布式日志收集的方法

    在Go語言開發(fā)中實現(xiàn)高性能的分布式日志收集的方法

    本文介紹了在Go語言開發(fā)中實現(xiàn)高性能分布式日志收集的關鍵步驟和考慮因素,包括日志生成與采集、日志傳輸、日志收集器的高性能網(wǎng)絡I/O、日志存儲與分析、監(jiān)控與告警系統(tǒng)、擴展性與可維護性等方面,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-01-01
  • Golang中處理import自定義包出錯問題的解決辦法

    Golang中處理import自定義包出錯問題的解決辦法

    最近開始使用Go/GoLand在import自定義包時出現(xiàn)各種狀況,下面這篇文章主要給大家介紹了關于Golang中處理import自定義包出錯問題的解決辦法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • Go 泛型和非泛型代碼詳解

    Go 泛型和非泛型代碼詳解

    Go 在 1.17 中支持泛型,但是默認未開啟;1.18 中會正式支持泛型,下面文章內容小編將給大家講解Go 語言中的泛型和非泛型并且附上代碼詳解,剛興趣的小伙伴請參考下面文章的具體內容
    2021-10-10
  • Go項目與Docker結合實現(xiàn)高效部署深入探究

    Go項目與Docker結合實現(xiàn)高效部署深入探究

    在現(xiàn)代軟件開發(fā)中,使用Docker部署應用程序已經(jīng)成為一種標準實踐,本文將深入探討如何將Go項目與Docker結合,實現(xiàn)高效、可靠的部署過程,通過詳細的步驟和豐富的示例,你將能夠迅速掌握這一流程
    2023-12-12
  • GO如何模擬流操作實現(xiàn)示例探究

    GO如何模擬流操作實現(xiàn)示例探究

    這篇文章主要為大家介紹了GO如何模擬流操作實現(xiàn)示例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Golang中實現(xiàn)數(shù)據(jù)脫敏處理的go-mask包分享

    Golang中實現(xiàn)數(shù)據(jù)脫敏處理的go-mask包分享

    這篇文章主要是來和大家分享一個在輸出中對敏感數(shù)據(jù)進行脫敏的工作包:go-mask,可以將敏感信息輸出的時候替換成星號或其他字符,感興趣的小編可以跟隨小編一起了解下
    2023-05-05
  • golang使用go mod導入本地包和第三方包的方式

    golang使用go mod導入本地包和第三方包的方式

    這篇文章主要介紹了golang使用go mod導入本地包和第三方包的方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論

霞浦县| 上虞市| 岗巴县| 马尔康县| 方正县| 苍南县| 鲁山县| 扶沟县| 南宁市| 海阳市| 西乌珠穆沁旗| 屏东市| 台湾省| 宁陵县| 渑池县| 库尔勒市| 元阳县| 蚌埠市| 阿拉善右旗| 磐石市| 子长县| 嘉兴市| 自贡市| 手游| 小金县| 鸡东县| 梁平县| 汉中市| 榆树市| 新余市| 信阳市| 邛崃市| 峨眉山市| 屯昌县| 简阳市| 永仁县| 沿河| 苗栗市| 宁河县| 灵丘县| 台南市|