mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-29 15:06:46 +08:00
1 parent
c51ae86876
commit
7bce701907
3 files changed
+23
-5
No files matched your search
@@ -166,7 +166,7 @@ func (e *Editor) outputSnapshot(ctx context.Context, options WriteOptions) (*Edi
|
|||||||
return &snapshot, nil
|
return &snapshot, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// compressionImageSafety 保护蒙版及其原图和替换图像,不完整的文档结构不参与降采样
|
// compressionImageSafety 按当前入口保护蒙版及其原图和替换图像,不完整的文档结构不参与降采样
|
||||||
// 入参: ctx 取消上下文, images 图片资源
|
// 入参: ctx 取消上下文, images 图片资源
|
||||||
// 返回: map[string]bool 只能无损处理的资源路径, bool 是否可分析尺寸, error 读取或取消错误
|
// 返回: map[string]bool 只能无损处理的资源路径, bool 是否可分析尺寸, error 读取或取消错误
|
||||||
func (r *Reader) compressionImageSafety(ctx context.Context, images []ImageInfo) (map[string]bool, bool, error) {
|
func (r *Reader) compressionImageSafety(ctx context.Context, images []ImageInfo) (map[string]bool, bool, error) {
|
||||||
@@ -174,7 +174,11 @@ func (r *Reader) compressionImageSafety(ctx context.Context, images []ImageInfo)
|
|||||||
safe := true
|
safe := true
|
||||||
structured := len(r.OFD.DocBody) != 0
|
structured := len(r.OFD.DocBody) != 0
|
||||||
if structured {
|
if structured {
|
||||||
dependencies, structures, err := r.documentDependencies(ctx, r.DocumentIndex())
|
entry, err := r.DocumentRootContext(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, false, err
|
||||||
|
}
|
||||||
|
dependencies, structures, err := r.versionDependencies(ctx, entry, nil, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if ctx.Err() != nil {
|
if ctx.Err() != nil {
|
||||||
return nil, false, ctx.Err()
|
return nil, false, ctx.Err()
|
||||||
|
|||||||
@@ -61,6 +61,12 @@ func (r *Reader) compressionImagePlan(ctx context.Context, options CompressionOp
|
|||||||
}
|
}
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
if len(catalog) == 0 {
|
||||||
|
if document != r {
|
||||||
|
document.Close()
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
var demands map[string]image.Point
|
var demands map[string]image.Point
|
||||||
masks, geometry, err := document.compressionImageSafety(ctx, catalog)
|
masks, geometry, err := document.compressionImageSafety(ctx, catalog)
|
||||||
if err == nil && geometry {
|
if err == nil && geometry {
|
||||||
|
|||||||
+11
-3
@@ -50,6 +50,14 @@ type versionEditGraph struct {
|
|||||||
// 入参: ctx 取消上下文, entry 文档入口, parts 待修改条目, generated 本次自产页面及引用
|
// 入参: ctx 取消上下文, entry 文档入口, parts 待修改条目, generated 本次自产页面及引用
|
||||||
// 返回: map[string]bool 引用路径, error 读取、结构或取消错误
|
// 返回: map[string]bool 引用路径, error 读取、结构或取消错误
|
||||||
func (r *Reader) versionFileDependencies(ctx context.Context, entry string, parts map[string][]byte, generated map[string]editorGeneratedReferences) (map[string]bool, error) {
|
func (r *Reader) versionFileDependencies(ctx context.Context, entry string, parts map[string][]byte, generated map[string]editorGeneratedReferences) (map[string]bool, error) {
|
||||||
|
used, _, err := r.versionDependencies(ctx, entry, parts, generated)
|
||||||
|
return used, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// versionDependencies 从指定入口汇总文件依赖和结构文件,不混入其他版本或读取二进制资源
|
||||||
|
// 入参: ctx 取消上下文, entry 文档入口, parts 待修改条目, generated 本次自产页面及引用
|
||||||
|
// 返回: map[string]bool 全部依赖, map[string]bool 结构文件, error 读取、结构或取消错误
|
||||||
|
func (r *Reader) versionDependencies(ctx context.Context, entry string, parts map[string][]byte, generated map[string]editorGeneratedReferences) (map[string]bool, map[string]bool, error) {
|
||||||
view := *r
|
view := *r
|
||||||
if len(parts) != 0 {
|
if len(parts) != 0 {
|
||||||
view.files = maps.Clone(r.files)
|
view.files = maps.Clone(r.files)
|
||||||
@@ -70,7 +78,7 @@ func (r *Reader) versionFileDependencies(ctx context.Context, entry string, part
|
|||||||
}
|
}
|
||||||
for len(queue) != 0 {
|
for len(queue) != 0 {
|
||||||
if err := ctx.Err(); err != nil {
|
if err := ctx.Err(); err != nil {
|
||||||
return nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
name := queue[0]
|
name := queue[0]
|
||||||
queue = queue[1:]
|
queue = queue[1:]
|
||||||
@@ -78,10 +86,10 @@ func (r *Reader) versionFileDependencies(ctx context.Context, entry string, part
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if err := view.documentFileReferences(ctx, name, false, add); err != nil {
|
if err := view.documentFileReferences(ctx, name, false, add); err != nil {
|
||||||
return nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return used, ctx.Err()
|
return used, queued, ctx.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
// versionEditGraph 流式建立标准文件依赖图,不保留完整XML节点树或解压后的原包文件
|
// versionEditGraph 流式建立标准文件依赖图,不保留完整XML节点树或解压后的原包文件
|
||||||
|
|||||||
Reference in new issue
Block a user