LWE和RLWE问题学习

article/2025/9/27 23:46:05

LWE概念

又称误差还原,容错学习问题,即已知一个矩阵 A A A以及一个向量,求解
b ^ = A x + e \hat{b}=A x+e b^=Ax+e
这里 e e e是一个固定数值范围内随机采集的一个随机噪音向量,所以这个问题就转化为通过 A A A b ^ \hat{b} b^来还原最初的未知向量 x x x
可以理解为:需要找到一组系数,使得一组基向量的线性组合无线逼近目标向量,使用噪音误差的大小来定义我们需要距离目标向量有多近。

分类
一般分为两类,决策LWE(简称为DLWE)的设定和搜索LWE(简称为SLWE)基本相同。唯一不同的是,SLWE最后的问题是需要我们找到 s s s,而DLWE只需要让我们辨别看到的 b ^ = A s + e \hat b = As+e b^=As+e到底是LWE问题中的误差乘积还是一个随机生成的向量。

LWE分类

搜索LWE问题(Search LWE Problem)

关键概念
在这里插入图片描述
L W E ( n , m , q , x B ) : S e a r c h V e r s i o n L e t A ← R Z q m × n , s ← R Z q n , e ← R x B G i v e n ( A , A s + e ) , f i n d s ′ ∈ Z q n s . t . ∥ A s ′ − ( A s + e ) ∥ ∞ ≤ B LWE\left(n, m, q, x_{B}\right): Search Version\\ Let A \stackrel{R}{\leftarrow} \mathbb{Z}_{q}^{m \times n}, s \stackrel{R}{\leftarrow} \mathbb{Z}_{q}^n, e \stackrel{R}{\leftarrow} x_{B} \\ Given (A, A s+e) , find s^{\prime} \in \mathbb{Z}_{q}^{n} s.t. \left\|A s^{\prime}-(A s+e)\right\|_{\infty} \leq B LWE(n,m,q,xB):SearchVersionLetARZqm×n,sRZqn,eRxBGiven(A,As+e),findsZqns.t.As(As+e)B
帮助理解:
这里开始定义了四个重要的参数,

  • m m m代表线性方程组有多少个方程,
  • n n n代表了每个方程中有多少个未知数。
  • q q q则是有限域的大小,一般来说这会是一个足够大的素数。
  • 误差噪音取值上限 B B B的大小决定问题中需要找到的解距离实际取值 b ^ \hat{b} b^可以相差多少。
  • R R R代表随机选取。

结合各个参数的含义,则LWE问题的定义就是给定矩阵 A A A与误差乘积 A s + e As+e As+e,如何能够搜索出(search)一个合理的 A s ′ As^{\prime} As,使得得到的向量和问题给定的 A s + e As+e As+e之间的误差不能超过误差上限 B B B

可以理解为:给定矩阵 A A A以及带有误差的结果 A s + e As+e As+e还原出未知的向量 s s s

来看看这些个参数会如何影响LWE问题的难度

  • 如果系统中的未知变量越多那么,问题将越难,也就是增大 n n n的大小会增加LWE问题的难度, n n n也被称为LWE问题的安全参数。
  • m m m可以看作 n n n的多项式倍数,如果可用的方程组越多,那么解出未知向量就会容易一些。
  • q q q也可以看作 n n n的多项式倍数
  • 误差 B B B需要比 q q q小很多,这样找到正确的解老说会相对简单。

决策LWE问题(Decisional LWE Problem)

在解决证明一个困难问题的安全性的时候,我们一般都会使用决策版本的LWE问题(Decisional LWE)

L W E ( n , m , q , x B ) : D e c i s i o n a l V e r s i o n Let ⁡ A ← R Z q m × n , s ⟵ R Z q n , e ← R x B , v ⟵ R Z q m . D i s t i n g u i s h ( A , A s + e ) f r o m ( A , v ) . L W E\left(n, m, q, x_{B}\right) : Decisional Version\\ \operatorname{Let} A \stackrel{R}{\leftarrow} \mathbb{Z}_{q}^{m \times n}, s \stackrel{R}{\longleftarrow} \mathbb{Z}_{q}^n, e \stackrel{R}{\leftarrow} x_{B}, v \stackrel{R}{\longleftarrow} \mathbb{Z}_{q}^{m} .\\ Distinguish (A, A s+e) from (A, v) . LWE(n,m,q,xB):DecisionalVersionLetARZqm×n,sRZqn,eRxB,vRZqm.Distinguish(A,As+e)from(A,v).
只能看到两个值, A A A b ^ \hat b b^,需要辨别出看到的到底是一个LWE问题实例 b ^ = A s + e \hat b = As+e b^=As+e,还是一个随机变量 v v v
由于LWE问题本身就是困难的,所以从 A s + e As+e As+e中提取出未知变量 x x x来是很困难的,也就是,在我们眼中 A s + e As+e As+e和一个随机变量其实没多大区别,没法获取有价值的信息。
一般来说参数一个个生成比较费力,所以一般都指定一个参数例如 n n n然后交给一个函数 f ( n ) f(n) f(n)来生成其他参数的输出,只要保证参数生成符合要求即可。

LWE算法

LWE私钥加密算法

LWE加密的本质思想是,把消息明文 m m m(0或1)叠加到随机均匀的LWE实例 < a , s > + e <a,s>+e <a,s>+e上,就像one-time-pad一样,叠加后的结果与随机均匀选取的数区分不出来。

由于 < a , s > + e ∈ Z q <a,s>+e \in \mathbb{Z_q} <a,s>+eZq,因此它的值在 ( − q / 2 , q / 2 ] (-q/2,q/2] (q/2,q/2]之间。
注意,这里的模运算是取的中心模。一般的模运算采用的是向下取整,也就是 a m o d p = a − ⌊ a / p ⌋ ∗ p a \mod p = a- \lfloor a/p \rfloor * p amodp=aa/pp。故模 p p p的通常范围是 [ 0 , p − 1 ] [0,p-1] [0,p1],而中心模使用的是 a m o d p = a − ⌈ a / p ⌋ ∗ p a \mod p = a- \lceil a/p \rfloor * p amodp=aa/pp,使用的最近整数。顾故,模p的范围是 ( − p / 2 , p / 2 ] (-p/2,p/2] (p/2,p/2]。可以把中心模看作是将 ( p / 2 , p ] (p/2,p] (p/2,p]映射到 ( − p / 2 , 0 ] (-p/2,0] (p/2,0]上面。

然后将 ( − q / 2 , q / 2 ] (-q/2,q/2] (q/2,q/2]看作一个有限环域,当需要加密一个bit的时候,把这个bit映射到环上去,0代表环的一头(即0),1代表环的另一头(即q/2),这就相当于对消息进行编码。我们叠加的噪音就等于是把这个映射的点往上或者往下位移了一部分,这样只要噪音的大小不过分(低于q/4),我们就可以通过看这个值到底在环的哪一侧来判断这个bit的具体取值了。但是一旦叠加噪音超过了临界值,那么就无法判断bit的值了。假如,噪音变大了,就有可能导致误差上限超过临界值,一旦超过,那么0和1极有可能映射到相同的点上去,那就导致解密失败。
在这里插入图片描述
当然,消息也可以是一个有限数值,如 m ∈ Z t m \in \mathbb{Z_t} mZt,同样可以把消息空间映射到有限环域 Z q Z_q Zq上。思路如下,

这里的 m + e m+e m+e,由于带有噪声叠加,所以是没法直接解密的,也不能像比特加密一样单纯的映射到两个点周围。那么这里的加密就需要把 m m m搬到 Z q \mathbb{Z_q} Zq的高位上,相当于把 m m m放大了 q / t q/t q/t倍,即,把长度为 t t t的从地位端挪到了模 q q q的高位端。这样噪声因为比较小就会留在低位,这样明文和噪声分离,就容易解出明文。
在这里插入图片描述
由此,私钥加密算法如下,
私钥: s ← Z q n s \leftarrow \mathbb{Z_q^n} sZqn
消息: m ← Z t m m \leftarrow \mathbb{Z_t^m} mZtm
LWE参数: A ← Z q m × n A \leftarrow \mathbb{Z_q^{m \times n}} AZqm×n和向量 e ← χ m e \leftarrow \chi^m eχm,计算 b = A s + e m o d q b = As+e \mod q b=As+emodq
加密: ( A , c = ⌊ q / t ⌋ ⋅ m + b ) (A,c=\lfloor q/t \rfloor \cdot m +b ) (A,c=q/tm+b)
解密: ⌊ t q ( c − A s ) m o d q ⌉ m o d t \lfloor \dfrac{t}{q}(c-As) \mod q \rceil \mod t qt(cAs)modqmodt
⌊ q / t ⌋ = q / t − △ \lfloor q/t \rfloor= q/t - \triangle q/t=q/t,其中 0 ≤ △ < 1 0\le \triangle <1 0<1,解密时, c − A s = t q m + ( e − △ m ) c-As = \dfrac{t}{q}m+(e-\triangle m) cAs=qtm+(em),当噪声 ( e − △ m ) (e-\triangle m) (em)小于 q / 2 t q/2t q/2t时,就近取整好就能正确还原 m m m。当 t = 2 t=2 t=2的时候就是对比特加密。

帮助理解:把 t t t这么长的消息空间,映射到 q q q这么长的环上去,等价于把 q q q直接 t t t等分,每一份代表一个值,(例如 t = 2 t=2 t=2就是把 q q q一分为二, t = 4 t=4 t=4就是把q一分为四),此时要想解密不出错,那么肯定要 m + e m+e m+e这个值在一份 q / t q/t q/t里面,这样才能正确解密,因为有个就近取整的四舍五入操作,所以 e e e不能大于一份 q / t q/t q/t的一半,即 e < ( q / t ) / 2 e<(q/t)/2 e<(q/t)/2

Regev的LWE公钥加密算法

这是一个基于DLWE(决策性LWE问题)的格密码学中的公钥加密系统,对比特加密
具体内容
在这里插入图片描述

正确性验证
将解密部分计算展开
x ~ = c 1 − c 0 ⋅ s = r T b + q / 2 ⋅ x − r T A s = r T ( A s + e ) − r T A s + q / 2 ⋅ x = r T e + q / 2 ⋅ x \begin{array}{c} \tilde{x}=c_{1}-c_{0} \cdot s \\ =r^{T} b+q / 2 \cdot x-r^{T} A s \\ =r^{T}(A s+e)-r^{T} A s+q / 2 \cdot x \\ =r^{T} e+q / 2 \cdot x \end{array} x~=c1c0s=rTb+q/2xrTAs=rT(As+e)rTAs+q/2x=rTe+q/2x
在这里插入图片描述

RLWE概念

环LWE问题是LWE问题在环上的版本,不同的是 A A A s s s的选取是在多项式环上。
多项式环 R q = Z q [ x ] / f ( x ) R_q= \mathbb{Z_q}[x]/f(x) Rq=Zq[x]/f(x),表示每次计算后都要对多项式系数模 q q q,对多项式模 f ( x ) f(x) f(x)。它其中的每个元素都是一个多项式,每一次操作都相当于对多个元素进行操作,也就是能够一次加密多个比特的明文,对比LWE每次仅能对一个比特操作来说能够大大提高效率满足实际需要。

RLWE分类

同样,它也有两个版本,即search 和 decision。
先定义一些参数,安全参数 n n n,模 q = q ( n ) ≥ 2 q = q(n)\ge 2 q=q(n)2 f ( x ) = x d + 1 f(x) = x^d +1 f(x)=xd+1其中 d = d ( n ) d = d(n) d=d(n)是2的幂次, R = Z [ x ] / f ( x ) R = \mathbb{Z}[x]/f(x) R=Z[x]/f(x) R q = Z q [ x ] / f ( x ) R_q = \mathbb{Z}_q[x]/f(x) Rq=Zq[x]/f(x) χ \chi χ R R R上的错误概率分布。
随机选取 s ← R q s \leftarrow R_q sRq a i ← R q a_i \leftarrow R_q aiRq,噪声 e i ← χ e_i \leftarrow \chi eiχ,令 b i = a i ⋅ s + e i b_i = a_i \cdot s +e_i bi=ais+ei,其中 i = 1 , … , m i=1,\ldots,m i=1,,m

搜索性RLWE

简述就是,给定 m m m ( a i , b i ) (a_i,b_i) (ai,bi),求解出秘密元素 s ← R q s \leftarrow R_q sRq

判定性RLWE

区分 m m m个随机均匀选取自 R q × R q R_q \times R_q Rq×Rq ( a i , b i ) (a_i,b_i) (ai,bi)和m个 ( a i , b i = a i ⋅ s + e i ) (a_i,b_i = a_i \cdot s+e_i) (ai,bi=ais+ei),其中 a i ← R q a_i \leftarrow R_q aiRq,噪声 e i ← χ e_i \leftarrow \chi eiχ

RLWE算法

RLWE公钥加密算法

S e c r e t K e y G e n ( 1 λ ) SecretKeyGen(1_{\lambda}) SecretKeyGen(1λ):随机均匀选取 s k = s ← R q sk = s \leftarrow R_q sk=sRq

P u b l i c K e y G e n ( s k ) PublicKeyGen(sk) PublicKeyGen(sk):随即均匀选取 a ← R q a \leftarrow R_q aRq,噪声 e 1 ← χ e_1 \leftarrow \chi e1χ,计算 b = a ⋅ s + e 1 b = a \cdot s +e_1 b=as+e1 p k = ( b , a ) ∈ R q × R q pk = (b,a) \in R_q \times R_q pk=(b,a)Rq×Rq

E n c ( p k , m ) Enc(pk,m) Enc(pk,m):加密 n n n位消息 m ∈ { 0 , 1 } n m \in \{0,1\}^n m{0,1}n,把它看作多项式 m ∈ R 2 m \in R_2 mR2的系数。随机选择 e 2 , e 3 , e 4 ← χ e_2,e_3,e_4 \leftarrow \chi e2,e3,e4χ,输出密文 ( c 1 , c 2 ) (c_1,c_2) (c1,c2)。其中
c 1 = ⌊ q / 2 ⌋ ⋅ m + b e 2 + e 3 ∈ R q c 2 = a e 2 + e 4 ∈ R q c_1= \lfloor q/2 \rfloor \cdot m+be_2+e_3 \in R_q \\ c_2=ae_2+e_4 \in R_q c1=q/2m+be2+e3Rqc2=ae2+e4Rq

D e c ( c , s k ) Dec(c,sk) Dec(c,sk):计算
m = ⌊ 2 q [ ( c 1 − c 2 ⋅ s ) m o d q ] ⌉ m o d 2 ⌊ 2 q [ < c , s > ] m o d q ⌉ m o d 2 m = \lfloor \frac{2}{q}[(c_1-c_2\cdot s)\mod q] \rceil \mod 2 \lfloor \frac{2}{q}[<c,s>] \mod q \rceil \mod 2 m=q2[(c1c2s)modq]⌉mod2q2[<c,s>]modqmod2
解密的正确性
c 1 − c 2 s = ⌊ q / 2 ⌋ ⋅ m + b e 2 + e 3 − ( a e 2 s + e 4 s ) = ⌊ q / 2 ⌋ ⋅ m + e 1 e 2 + e 3 − e 4 s \begin{aligned} c_1-c_2s &= \lfloor q/2 \rfloor \cdot m+be_2+e_3-(ae_2s+e_4s) \\ &=\lfloor q/2 \rfloor \cdot m+e_1e_2+e_3-e_4s \end{aligned} c1c2s=q/2m+be2+e3(ae2s+e4s)=q/2m+e1e2+e3e4s
可以看到噪声 e ∗ = e 1 e 2 + e 3 − e 4 s e^* = e_1e_2+e_3-e_4s e=e1e2+e3e4s,当噪声小于 ⌊ q / 2 ⌋ / 2 \lfloor q/2 \rfloor/2 q/2/2时,解密正确

RLWE公钥加密算法变形

噪声是偶数的形式,可以通过模2直接消除。
S e c r e t K e y G e n ( 1 λ ) SecretKeyGen(1_{\lambda}) SecretKeyGen(1λ):随机均匀选取 s k = s ← R q sk = s \leftarrow R_q sk=sRq

P u b l i c K e y G e n ( s k ) PublicKeyGen(sk) PublicKeyGen(sk):随即均匀选取 a 1 ← R q a_1 \leftarrow R_q a1Rq,噪声 e 1 ← χ e_1 \leftarrow \chi e1χ,计算 b = a ⋅ s + 2 e 1 b = a \cdot s +2e_1 b=as+2e1 p k = ( b , a ) ∈ R q × R q pk = (b,a) \in R_q \times R_q pk=(b,a)Rq×Rq

E n c ( p k , m ) Enc(pk,m) Enc(pk,m):加密 n n n位消息 m ∈ { 0 , 1 } n m \in \{0,1\}^n m{0,1}n,把它看作多项式 m ∈ R 2 m \in R_2 mR2的系数。随机选择 e 2 , e 3 , e 4 ← χ e_2,e_3,e_4 \leftarrow \chi e2,e3,e4χ,输出密文 ( c 1 , c 2 ) (c_1,c_2) (c1,c2)。其中
c 1 = m + b e 2 + 2 e 3 ∈ R q c 2 = a e 2 + 2 e 4 ∈ R q c_1= m+be_2+2e_3 \in R_q \\ c_2=ae_2+2e_4 \in R_q c1=m+be2+2e3Rqc2=ae2+2e4Rq

D e c ( c , s k ) Dec(c,sk) Dec(c,sk):计算
m = [ ( c 1 − c 2 ⋅ s ) m o d q ] m o d 2 m =[(c_1-c_2\cdot s)\mod q] \mod 2 m=[(c1c2s)modq]mod2
解密的正确性
c 1 − c 2 s = m + b e 2 + 2 e 3 − ( a e 2 s + 2 e 4 s ) = m + 2 e 1 e 2 + 2 e 3 − 2 e 4 s \begin{aligned} c_1-c_2s &= m+be_2+2e_3-(ae_2s+2e_4s) \\ &=m+2e_1e_2+2e_3-2e_4s \end{aligned} c1c2s=m+be2+2e3(ae2s+2e4s)=m+2e1e2+2e32e4s
可以看到噪声 e ∗ = 2 e 1 e 2 + 2 e 3 − 2 e 4 s e^* = 2e_1e_2+2e_3-2e_4s e=2e1e2+2e32e4s,模2的时候噪声就可以直接消除。

参考

格密码学与LWE问题(强推!)

《全同态加密从理论到实践》陈智罡

格密码之Ring-LWE (section 1)

李孟天. 基于环LWE的全同态加密方案关键技术研究[D].战略支援部队信息工程大学,2018.


http://chatgpt.dhexx.cn/article/j4l4TwnM.shtml

相关文章

同态加密简介

同态加密概述 基本概念 同态加密&#xff08;Homomorphic Encryption,HE&#xff09;指将原始数据经过同态加密后&#xff0c;对密文进行特定的运算&#xff0c;得到的密文计算结果在进行同态解密后的得到的明文等价于原始明文数据直接进行相同计算所得到的数据结果。 历史与…

机器学习笔记(一)-局部加权回归(Locally weighted regression)LWR

在网上通过看斯坦福大学的机器学习课程&#xff0c;觉得讲的非常好。同时&#xff0c;为了加强自己的记忆&#xff0c;决定将自己学到的东西和一些理解记录下来&#xff0c;希望有所收获。废话不多说&#xff0c;直接开始笔记&#xff1a; 局部加权回归&#xff08;locally we…

ROS中7自由度机械臂自定义发布订阅节点

本篇用来记录一次作业的学习例程&#xff0c;错误之处敬请谅解&#xff0c;后续修改 作业要求&#xff1a; 写两个ROS节点&#xff0c;一个节点发布连续变化&#xff08;可以按sin曲线变化&#xff09;的7自由度的关节角信息&#xff1b;另一个节点订阅第一个节点发布的关节角…

【自己动手写CPU】加载存储指令的实现

目标 修改之前一直做测试的sopc&#xff0c;为其添加数据RAM&#xff0c;测试一般加载指令的实现&#xff0c;加入特殊加载存储指令。 探讨由于加载指令引起的load相关问题&#xff0c;给出OpenMIPS的解决方法&#xff0c;验证解决效果。 加载存储指令说明 31-2625-2120-161…

自己动手写CPU之第九阶段(2)——载入存储指令说明2(lwl、lwr)

将陆续上传新书《自己动手写CPU》。今天是第38篇&#xff0c;我尽量每周四篇&#xff0c;可是近期已经非常久没有实现这个目标了。一直都有事&#xff0c;不好意思哈。 开展晒书评送书活动&#xff0c;在亚马逊、京东、当当三大图书站点上&#xff0c;发表《自己动手写CPU》书评…

LWR--local weighted regression

转自http://www.cnblogs.com/jeromeblog/p/3396486.html 简单回顾一下线性回归。我们使用了如下变量&#xff1a; x —输入变量/特征&#xff1b; y —目标变量&#xff1b; (x,y) —单个训练样本&#xff1b; m —训练集中的样本数目&#xff1b; n —特征维度&#xff1b; (x…

局部加权回归(LWR) Matlab模板

将百度文库上一份局部加权回归的代码&#xff0c;将其改为模板以便复用。 q2x,q2y为数据集&#xff0c;是n*1的矩阵&#xff1b; r是波长参数&#xff0c;就是对于距离的惩罚力度&#xff1b; q_x是要拟合的数据横坐标&#xff0c;是1*n的矩阵&#xff1b; 得到的q_y即为所求坐…

自己动手写CPU之第九阶段(2)——加载存储指令说明2(lwl、lwr)

将陆续上传新书《自己动手写CPU》&#xff0c;今天是第38篇&#xff0c;我尽量每周四篇&#xff0c;但是最近已经很久没有实现这个目标了&#xff0c;一直都有事&#xff0c;不好意思哈。 开展晒书评送书活动&#xff0c;在亚马逊、京东、当当三大图书网站上&#xff0c;发表…

1.3 欠/过拟合,局部加权回归(Loess/LWR)及Python实现(基于随机梯度下降)

import numpy as np import matplotlib.pyplot as plt #定义一个正态分布&#xff0c;参数分别为均值&#xff0c;方差以及X的行向量 def guassianDistribution(mean,var,x):return 1/np.sqrt( 2 * np.pi * var )*np.exp( - (x[1]-mean) ** 2 / (2*var) ) #定义权值计算函数&am…

ubuntu18.04 编译rtt-lwr

https://rtt-lwr.readthedocs.io/en/latest/install/install-18.04-melodic.html 一路通过。 coundt find AF_INET address #4 Open roboticsai opened this issue on Mar 22, 2018 2 comments Comments roboticsai commented on Mar 22, 2018 after i run the rttlua-gnu…

LWR服务管理框架

详细接口文档地址:https://www.showdoc.cc/lwr2 目前支持微信版本&#xff1a;最新版。 主要介绍开发接口 2.0暂时支持tcp和http开发&#xff0c;两者传输json数据是一样的。如下介绍&#xff1a; 1.请求Lwr框架的数据内容如下 {"serverKey": "软件上设置的…

基于物理信息深度学习的交通状态估计:以LWR和CTM模型为例

1.文章信息 本次介绍的文章是2022年发表在IEEE Open Journal of Intelligent Transportation Systems的一篇名为《Physics-Informed Deep Learning for Traffic State Estimation: Illustrations With LWR and CTM Models》的文章&#xff0c;该文章应用物理信息深度学习方法估…

机器学习实战--局部加权线性回归(LWR)

一 概述 通常情况下的线性拟合不能很好地预测所有的值&#xff0c;因为它容易导致欠拟合&#xff08;under fitting&#xff09;&#xff0c;比如数据集是 一个钟形的曲线。而多项式拟合能拟合所有数据&#xff0c;但是在预测新样本的时候又会变得很糟糕&#xff0c;因为它导…

机器学习与算法(8)--局部加权学习算法(LWR)

局部加权学习算法&#xff08;LWR&#xff09; 局部加权回归&#xff08;LWR&#xff09;是非参数学习方法。 首先参数学习方法是这样一种方法&#xff1a;在训练完成所有数据后得到一系列训练参数&#xff0c;然后根据训练参数来预测新样本的值&#xff0c;这时不再依赖之前的…

局部加权回归

通常情况下的线性拟合不能很好地预测所有的值&#xff0c;因为它容易导致欠拟合&#xff08;under fitting&#xff09;&#xff0c;比如数据集是 一个钟形的曲线。而多项式拟合能拟合所有数据&#xff0c;但是在预测新样本的时候又会变得很糟糕&#xff0c;因为它导致数据的 …

冲击波理论

冲击波理论 冲击波理论&#xff08;the kinematic wave theory&#xff0c;也称LWR理论&#xff09;最初是由Lighthill, M. J和Whitham, G. B. 以及Richards, P. I. 于上世纪50年代提出的。该理论假设车流是一种类似于水流的运动&#xff0c;可以通过流量、密度和速度之间的关…

IOS捷径|九宫格切图工具 分享

还在为切九宫格图片找来找去找不到好工具而烦恼? 快使用九宫格切图快捷指令&#xff0c;5秒切出你想要的效果 为保障更好的切图效果&#xff0c;轻使用正方形图片参与切图&#xff0c;如没有&#xff0c;也请尽量裁剪出正方形图片再参与切图 支持22、23、3*3 多种组合方式 …

canvas切割原图为九宫格图片

originUrl 图片原地址cWidth 生成图片的宽度cHeight 生成图片的高度top 第一条切割线距离原图片顶部的距离bottom 第二条切割线距离原图片底部的距离left 第三条切割线距离原图片左侧的距离right 第四条切割线距离原图片右侧的距离 切割 效果图 index.html <!DOCTYPE html…

Unity的UGUI用TexturePacker全自动打图集,包括九宫格切图信息

Unity的UGUI用TexturePacker全自动打图集&#xff0c;包括九宫格切图信息 前言环境准备实现过程注意总结版权声明 前言 最近在学习UGUI的打图集&#xff0c;之前一直在用SpritePacker和Sprite Atlas打图集&#xff0c;现在记录下另一种打图集方式&#xff1a;TexturePacker 主…

NGUI 九宫格切图

UISprite 的 Type 选择 Sliced 选择Edit 中的 Border