<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
圖片的長寬不是固定的,
正方形圖片的長寬是固定的, 比如512x512
圖片肯定是要縮放的, 我要需要一個縮放係數;
圖片肯定是要有位置的, 因此, 我們需要一個座標;
我們一共需要兩樣東西
"nodejs"; const { readImage } = require("image"); async function main() { let squareImg = await readImage("square.png"); let rectangleImg = await readImage("rectangle.png"); let squareWidth = squareImg.width; // 512 let squareHeight = squareImg.height; // 512 let rectangleWidth = rectangleImg.width; // 900 let rectangleHeight = rectangleImg.height; // 300 var scale = Math.min(squareWidth / rectangleWidth, squareWidth / rectangleHeight); console.log(scale); // 0.5688888888888889 } main();
900 × 0.5688888888888889 = 512
let scaledRectangleImg = await rectangleImg.scale(scaleValue); console.log(scaledRectangleImg);
列印的圖片資料
Image { _onRecycledCallbacks: [], _mat: Mat { __nativeObject: '-5476376627956078312', step: 2048, elemSize: 4, sizes: [ 171, 512 ], empty: 0, depth: 0, dims: 2, channels: 4, type: 24, cols: 512, rows: 171 } }
有一個sizes欄位
sizes: [ 171, 512 ]
表示這個mat的高和寬,
mat的高, 對應的是 rows 欄位, row表示行, 多個行摞起來就表示高;
mat的寬, 對應的是 cols 欄位, col表示列, 多個列排起來就表示寬;
我們先來看Y座標,
這是一個藍色背景的正方形,
還有一個縮放後的綠色長方形
這個Y座標應該是多少呢?
在綠色下方, 是剩餘的藍色,
假設我們的綠色長方形移動後的位置是紅色
這個移動的距離怎麼算呢?
移動的距離 = 正方形圖片高度的一半 - 長方形高度的一半
X的座標同理
移動的距離 = 正方形圖片寬度的一半 - 長方形寬度的一半
移動的距離 = 512/2 - 512/2 = 0
用canvas繪製圖片, 這裡的圖片要用Image轉成Bitmap, 因為canvas支援 Bitmap, 不支援 Image
let squareBitmap = squareImg.toBitmap(); let scaledRectangleBitmap = scaledRectangleImg.toBitmap(); let canvas = new Canvas(squareBitmap); let x = (squareWidth - scaledRectangleBitmap.getWidth()) / 2; let y = (squareHeight - scaledRectangleBitmap.getHeight()) / 2; canvas.drawBitmap(scaledRectangleBitmap, x, y, null); let drawingImg = Image.ofBitmap(squareBitmap); let tempImgPath = path.join(process.cwd(), "temp.png"); await writeImage(drawingImg, tempImgPath); app.viewFile(tempImgPath);
圖片不用了, 就要回收
squareImg.recycle(); rectangleImg.recycle(); scaledRectangleImg.recycle(); drawingImg.recycle(); squareBitmap.recycle(); scaledRectangleBitmap.recycle();
用 Matrix
"nodejs"; require("rhino").install(); const { readImage, writeImage, Image } = require("image"); const path = require("path"); const app = require("app"); const Matrix = android.graphics.Matrix; const Canvas = android.graphics.Canvas; async function main() { let squareImg = await readImage("square.png"); let rectangleImg = await readImage("rectangle.png"); let squareWidth = squareImg.width; // 512 let squareHeight = squareImg.height; // 512 let rectangleWidth = rectangleImg.width; // 900 let rectangleHeight = rectangleImg.height; // 300 var scaleValue = Math.min(squareWidth / rectangleWidth, squareWidth / rectangleHeight); let squareBitmap = squareImg.toBitmap(); let rectangleBitmap = rectangleImg.toBitmap(); let canvas = new Canvas(squareBitmap); let matrix = new Matrix(); matrix.postTranslate(-rectangleWidth / 2, -rectangleHeight / 2); matrix.postScale(scaleValue, scaleValue); matrix.postTranslate(squareWidth / 2, squareHeight / 2); canvas.drawBitmap(rectangleBitmap, matrix, null); let drawingImg = Image.ofBitmap(squareBitmap); let tempImgPath = path.join(process.cwd(), "temp.png"); await writeImage(drawingImg, tempImgPath); app.viewFile(tempImgPath); squareImg.recycle(); rectangleImg.recycle(); drawingImg.recycle(); squareBitmap.recycle(); } main();
Matrix 的縮放和平移的順序可以換換
matrix.postScale(scaleValue, scaleValue); matrix.postTranslate(squareWidth / 2, squareHeight / 2); matrix.postTranslate((-rectangleWidth * scaleValue) / 2, (-rectangleHeight * scaleValue) / 2);
或者
matrix.postTranslate(-rectangleWidth / 2, -rectangleHeight / 2); matrix.postTranslate(squareWidth / 2, squareHeight / 2); matrix.postScale(scaleValue, scaleValue, squareWidth / 2, squareHeight / 2);
理解Matrix的時候, 腦子裡要有參考系座標軸,
要是在電腦上畫出來就更好了, 電腦可以任意縮放和移動物體
drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
"nodejs"; require("rhino").install(); const { readImage, writeImage, Image } = require("image"); const path = require("path"); const app = require("app"); const Canvas = android.graphics.Canvas; const Rect = android.graphics.Rect; async function main() { let squareImg = await readImage("square.png"); let rectangleImg = await readImage("rectangle.png"); let squareWidth = squareImg.width; // 512 let squareHeight = squareImg.height; // 512 let rectangleWidth = rectangleImg.width; // 900 let rectangleHeight = rectangleImg.height; // 300 var scaleValue = Math.min(squareWidth / rectangleWidth, squareWidth / rectangleHeight); let squareBitmap = squareImg.toBitmap(); let rectangleBitmap = rectangleImg.toBitmap(); let canvas = new Canvas(squareBitmap); let src = new Rect(0, 0, rectangleWidth, rectangleHeight); let dst = new Rect( (squareWidth - rectangleWidth * scaleValue) / 2, (squareHeight - rectangleHeight * scaleValue) / 2, (squareWidth + rectangleWidth * scaleValue) / 2, (squareHeight + rectangleHeight * scaleValue) / 2 ); canvas.drawBitmap(rectangleBitmap, src, dst, null); let drawingImg = Image.ofBitmap(squareBitmap); let tempImgPath = path.join(process.cwd(), "temp.png"); await writeImage(drawingImg, tempImgPath); app.viewFile(tempImgPath); squareImg.recycle(); rectangleImg.recycle(); drawingImg.recycle(); squareBitmap.recycle(); } main();
環境
裝置: 小米11pro
Android版本: 12
Autojs版本: 9.3.11
名人名言
思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓檔案, autojs檔案, 最後才是群裡問問
宣告
部分內容來自網路 本教學僅用於學習, 禁止用於其他用途
以上就是autojs長寬不定的圖片在正方形圖片居中實現詳解的詳細內容,更多關於autojs長寬不定圖片居中的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45