图片存储,excel表格安装dpi为120保存的
dpi:每英寸占用的像素个数
举例:
本地图片 像素为500,dpi为96, 以计算单位为基准 在excel中的像素就是 (500/96*120),保证计算单位相同。
1英寸=像素/dpi
1磅=(像素-7)/9
1字符=像素*0.6
1英寸=2.54cm
1厘米(cm)= 0.394英寸(in)
行高 单位(磅)
列宽 单位(字符)
举例:
表格的单元格的大小为 2英寸2英寸
=》 2120=240
=》 行高=(240-7)/9=25.9(取大25.888取25.9)
列宽=240*0.6=144
照片:
410*541 像素 72*72dpi
宽 410/72=5.7 in=14.48 cm
高 541/72=7.52 in=19.11 cm
缩小:
宽 2/(410/72)=72*2/410=0.352-0.01=0.35
高 2/(541/72)=72*2/541=0.267-0.01=0.26 去两位会自动从第三位进1,需要减掉
取最小的,等比缩放 0.26/0.75 ????为什么除以0.75
代码:
package main
import (
"fmt"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"os"
"github.com/360EntSecGroup-Skylar/excelize"
"image"
"strconv"
)
func main() {
changepwd()
create()
creatimg()
}
func creatimg(){
filepath:="3.jpg"
xlsx, err := excelize.OpenFile("Book1.xlsx")
if err != nil {
fmt.Println(err)
return
}
f,err:=os.Open(filepath)
if err!=nil{
fmt.Println("open:",err)
return
}
defer f.Close()
img,str,err:=image.DecodeConfig(f)
if err!=nil{
fmt.Println("DecodeConfig:",err)
return
}
fmt.Println("str:",str)
fmt.Println(img.Width)
fmt.Println(img.Height)
//像素(x) dpi(d) 英寸(y) y=x/dpi cm=y*2.54 2=144/72
//行高 磅=(x-7)/9
//列宽 字符=x*0.6 5/3
imgdpi:=72.00
exceldpi:=120.00
cellpixel:=2.00
var pixel float64=exceldpi*cellpixel//2英寸 5.08 (excel以120为dpi,dpi为72的像素存入execl 像素需要*120/72 相当于变成了原来的1.25倍)
w:=(pixel-7)/9+0.78+0.01//单元格稍大一点
h:=pixel*0.6+0.01//单元格稍大一点
fmt.Println("img.Width:",img.Width)
fmt.Println("img.Height:",img.Height)
fmt.Println("w:",w)
fmt.Println("h:",h)
xlsx.SetColWidth("Sheet1", "A","A",w)
xlsx.SetRowHeight("Sheet1", 1,h)
err = xlsx.Save()
if err != nil {
fmt.Println(err)
}
size:=float64(img.Width)//像素
if img.Height>img.Width{
size = float64(img.Height)
}
multiple:=imgdpi*cellpixel/size-0.01
multiplestr:=strconv.FormatFloat(multiple/0.75,'f',3,64)
fmt.Println("multiplex:",multiplestr)
//插入图片
//err = xlsx.AddPicture("Sheet1", "A1", "./1.jpeg", `{"positioning": "oneCell"}`)
optstr:=`{"x_scale": `+multiplestr+`, "y_scale": `+multiplestr+`,"lock_aspect_ratio":true}`
err = xlsx.AddPicture("Sheet1", "A1", filepath, optstr)
fmt.Println("optstr:",optstr)
if err != nil {
fmt.Println(err)
}
在工作表中插入图片,并设置图片的缩放比例
//err = xlsx.AddPicture("Sheet1", "D2", "./1.jpeg", `{"x_scale": 0.5, "y_scale": 0.5}`)
//if err != nil {
// fmt.Println(err)
//}
在工作表中插入图片,并设置图片的打印属性
//err = xlsx.AddPicture("Sheet1", "H2", "./1.jpeg", `{"x_offset": 15, "y_offset": 10, "print_obj": true, "lock_aspect_ratio": false, "locked": false}`)
//if err != nil {
// fmt.Println(err)
//}
// 保存文件
err = xlsx.Save()
if err != nil {
fmt.Println(err)
}
}
func read(){
xlsx, err := excelize.OpenFile("./Book1.xlsx")
if err != nil {
fmt.Println(err)
return
}
// 获取工作表中指定单元格的值
xlsx.SetColWidth("Sheet1", "B","B",28)
cell := xlsx.GetColWidth("Sheet1", "A")
fmt.Println(cell)// 列宽磅 64 8.11 如果不修改则返回64
cell2 := xlsx.GetRowHeight("Sheet1", 1)
fmt.Println(cell2)//行高 字符 20 13.8
}
func create(){
xlsx := excelize.NewFile()
// 创建一个工作表
//index := xlsx.NewSheet("Sheet2")
// 设置单元格的值
xlsx.SetCellValue("Sheet1", "B2", 100)
// 设置工作簿的默认工作表
//xlsx.SetActiveSheet(index)
// 根据指定路径保存文件
err := xlsx.SaveAs("./Book1.xlsx")
if err != nil {
fmt.Println(err)
}
}
func changepwd(){
path:=`G:\gopath\src\github.com\Intelligentvision\test\pkg\excel`
fmt.Println(os.Getwd())//返回当前路径
if err:=os.Chdir(path);err!=nil{ //修改工作路径到指定路径
fmt.Println(err)
return
}else{
fmt.Println(os.Getwd())//返回当前路径
}
}