go言語におけるpdf回転画像機能の実現(CentOS)
5512 ワード
一、centos下の環境配置
手順1:ImageMagickの配備
(1)http://www.imagemagick.org/download/上に適切なバージョンを見つけてダウンロードし、私が選んだバージョンはImageMagick-6.9.9-36です.
(2)先ほどダウンロードしたファイルを解凍する:tar xvf ImageMagick-6.9.9-36.tar.gz
(3)解凍ディレクトリに入る:cd ImageMagick-6.9.9-36
(4)構成の確認:./configure
(5)インストールjpeg:yum install libjpeg*libpng*freetype*gd*
(6)ImageMagick:make installのインストール
convert-resize 100 x 100 huaを入力.jpg hua1.jpgが正常に実行された場合、インストールに成功したことを示します.インストール中に次のようにエラーが発生しました.
{[Error:Command failed:convert:nodecode delegate for this image format `JPEG' @ error/constitute.c/ReadImage/501.convert: no images defined `/home/node/head/I/IMG_0005.JPG' @ error/convert.c/ConvertImageCommand/3230.
] code: 1, signal: null }
解決策:Imagemagickmake uninstallを再インストールします./configuremakemake installの再呼び出しに成功しました.
(7)環境変数構成:/etc/profileに入り、書き込み
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
export MAGICK_CODER_MODULE_PATH=/data/download/ImageMagick-6.9.9-36/coders/
そのうちMAGICK_CODER_MODULE_PATHとは、ImageMagick-6.9.9-36インストールディレクトリのcoders、PKG_CONFIG_PATHパスの下の内容は図の通りです.
手順2:GhostScriptの配備
(1)GhostScriptをダウンロードしてインストールし、公式サイトのアドレス:http://ghostscript.com/download/gsdnld.html.ここでダウンロードしたのはghostscript-9.22-linux-x 86です.64.tgz
(2)先ほどダウンロードしたファイルを解凍する:tar xvf ghostscript-9.22-linux-x 86_64.tgz
(3)解凍ディレクトリに入り、gsを/usr/binディレクトリに直接コピーする
(4)/usr/binディレクトリに入り、chmod 777 gs
(5)入力コマンドgs-versionは以下のような出力があれば、インストールに成功したことを示し、印刷はバージョンである.
二、コード実装
手順1:imagickのダウンロード
ステップ2:go実装コードは次のとおりです.
手順1:ImageMagickの配備
(1)http://www.imagemagick.org/download/上に適切なバージョンを見つけてダウンロードし、私が選んだバージョンはImageMagick-6.9.9-36です.
(2)先ほどダウンロードしたファイルを解凍する:tar xvf ImageMagick-6.9.9-36.tar.gz
(3)解凍ディレクトリに入る:cd ImageMagick-6.9.9-36
(4)構成の確認:./configure
(5)インストールjpeg:yum install libjpeg*libpng*freetype*gd*
(6)ImageMagick:make installのインストール
convert-resize 100 x 100 huaを入力.jpg hua1.jpgが正常に実行された場合、インストールに成功したことを示します.インストール中に次のようにエラーが発生しました.
{[Error:Command failed:convert:nodecode delegate for this image format `JPEG' @ error/constitute.c/ReadImage/501.convert: no images defined `/home/node/head/I/IMG_0005.JPG' @ error/convert.c/ConvertImageCommand/3230.
] code: 1, signal: null }
解決策:Imagemagickmake uninstallを再インストールします./configuremakemake installの再呼び出しに成功しました.
(7)環境変数構成:/etc/profileに入り、書き込み
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
export MAGICK_CODER_MODULE_PATH=/data/download/ImageMagick-6.9.9-36/coders/
そのうちMAGICK_CODER_MODULE_PATHとは、ImageMagick-6.9.9-36インストールディレクトリのcoders、PKG_CONFIG_PATHパスの下の内容は図の通りです.
手順2:GhostScriptの配備
(1)GhostScriptをダウンロードしてインストールし、公式サイトのアドレス:http://ghostscript.com/download/gsdnld.html.ここでダウンロードしたのはghostscript-9.22-linux-x 86です.64.tgz
(2)先ほどダウンロードしたファイルを解凍する:tar xvf ghostscript-9.22-linux-x 86_64.tgz
(3)解凍ディレクトリに入り、gsを/usr/binディレクトリに直接コピーする
(4)/usr/binディレクトリに入り、chmod 777 gs
(5)入力コマンドgs-versionは以下のような出力があれば、インストールに成功したことを示し、印刷はバージョンである.
二、コード実装
手順1:imagickのダウンロード
ステップ2:go実装コードは次のとおりです.
package main
import (
"os"
"strconv"
"gopkg.in/gographics/imagick.v2/imagick"
)
func main() {
ConvertPdfToImage("test.pdf", 800, 1212, 200, 85)
}
//ConvertPdfToImage pdf
//@resolution:
//@CompressionQuality: : 1~100
func ConvertPdfToImage(bookname string, pageWidth uint, pageHeight uint, resolution float64, compressionQuality uint) (err error) {
imagick.Initialize()
defer imagick.Terminate()
mw := imagick.NewMagickWand()
//defer mw.Clear()
defer mw.Destroy()
if err := mw.SetResolution(resolution, resolution); err != nil {
println(" ")
return err
}
if err := mw.ReadImage(bookname); err != nil {
println(" ")
return err
}
var pages = int(mw.GetNumberImages())
println(" :", pages)
//
addPages := 0
path := ""
for i := 0; i < pages; i++ {
mw.SetIteratorIndex(i) // This being the page offset
// , alpha , JPG alpha , ReadImage
if err := mw.SetImageAlphaChannel(imagick.ALPHA_CHANNEL_FLATTEN); err != nil {
println(" ")
return err
}
mw.SetImageFormat("jpg")
mw.SetImageCompression(imagick.COMPRESSION_JPEG)
mw.SetImageCompressionQuality(compressionQuality)
// width>height ,
pWidth := mw.GetImageWidth()
pHeight := mw.GetImageHeight()
//
if pWidth > pHeight {
//mw.ResizeImage(pageWidth*2, pageHeight, imagick.FILTER_UNDEFINED, 1.0)
mw.ThumbnailImage(pageWidth*2, pageHeight)
tempImage := mw.GetImageFromMagickWand()
leftMw := imagick.NewMagickWandFromImage(tempImage) // , , tempImage
//
mw.CropImage(pageWidth, pageHeight, 0, 0)
path = "./book/page" + strconv.Itoa(i+addPages) + ".jpg"
mw.WriteImage(path)
//
leftMw.SetImageFormat("jpg")
leftMw.SetImageCompression(imagick.COMPRESSION_JPEG)
leftMw.SetImageCompressionQuality(compressionQuality)
leftMw.CropImage(pageWidth, pageHeight, int(pageWidth), 0)
addPages++
path = "./book/page" + strconv.Itoa(i+addPages) + ".jpg"
leftMw.WriteImage(path)
leftMw.Destroy()
} else {
mw.ThumbnailImage(pageWidth, pageHeight)
path = "./book/page" + strconv.Itoa(i+addPages) + ".jpg"
mw.WriteImage(path)
}
}
println(" !")
os.Exit(0) // , !
return nil
}
、
:
:../gopkg.in/gographics/imagick.v2/imagick/drawing_wand.go:39: undefined: runtime.KeepAlive
:go
:go build gopkg.in/gographics/imagick.v2/imagick: invalid flag in pkg-config --cflags: -fopenmp
:go 。
:/tmp/go-build695941684/command-line-arguments/_obj/exe/pdfconvert: error while loading shared libraries: libMagickWand-6.Q16.so.5: cannot open shared object file: No such file or directory
: /user/local/lib , ldconfig /user/local/lib。 。
:http://blog.csdn.net/gaofuqi/article/details/26698547
http://blog.csdn.net/lisaem/article/details/50330953
http://blog.csdn.net/catoop/article/details/42677021
http://blog.csdn.net/arackethis/article/details/42241471