GENERATING AN INTERMEDIATE REPRESENTATION FOR CONVERTING BETWEEN LEGACY VECTOR PATHS AND VECTOR NETWORKS
20260045003 ยท 2026-02-12
Inventors
- Siddharth J. Singh (Noida, IN)
- Nikunj Goyal (Haridwar, IN)
- Vineet Batra (Pitam Pura, IN)
- Nilesh Mishra (Kanpur, IN)
Cpc classification
G06V10/46
PHYSICS
International classification
Abstract
Methods, systems, and non-transitory computer readable storage media are disclosed for utilizing a bidirectional intermediate representation to convert between different path representations of a vector image. The disclosed system determines vertices at points of a plurality of paths in a vector image. The disclosed systems determines pairs of points connected by primitives corresponding to the plurality of paths. The disclosed system generates a bidirectional intermediate representation of a vector image comprising the vertices at the points connected by edges representing the primitives according to the pairs of points. Additionally, the disclosed system converts a first path representation of the plurality of paths of the vector image to a second path representation of the plurality of paths of the vector image utilizing the bidirectional intermediate representation.
Claims
1. A computer-implemented method comprising: determining, by at least one processor, vertices at points of a plurality of paths in a vector image; determining, by the at least one processor, pairs of points connected by primitives corresponding to the plurality of paths; generating, by the at least one processor, a bidirectional intermediate representation of a vector image comprising the vertices at the points connected by edges representing the primitives according to the pairs of points; and converting, by the at least one processor, a first path representation of the plurality of paths of the vector image to a second path representation of the plurality of paths of the vector image utilizing the bidirectional intermediate representation.
2. The computer-implemented method of claim 1, further comprising determining a set of junctions and pairs of junctions in a vector network graph corresponding to the first path representation, wherein converting the first path representation to the second path representation comprises converting the set of junctions and the pairs of junctions in the vector network graph of the first path representation to Bezier curves according to the vertices while traversing the edges of the bidirectional intermediate representation.
3. The computer-implemented method of claim 2, wherein generating the bidirectional intermediate representation comprises: determining the vertices at coordinates corresponding to the set of junctions from the vector network graph; determining the primitives comprising parameterizable curves corresponding to the pairs of junctions from the vector network graph; generating, within the bidirectional intermediate representation, the edges representing the primitives connecting the vertices according to the parameterizable curves; determining a set of contours comprising one or more primitive sequences forming one or more closed paths in the vector image; and generating a mapping of the set of contours to corresponding vertices and corresponding edges of the bidirectional intermediate representation.
4. The computer-implemented method of claim 1, further comprising determining path data for Bezier curves including end points and control points of the Bezier curves in the first path representation, wherein converting the first path representation to the second path representation comprises converting the path data of the Bezier curves including the end points and the control points of the plurality of paths in the first path representation to a vector network graph comprising a set of junctions and pairs of junctions.
5. The computer-implemented method of claim 4, wherein generating the bidirectional intermediate representation comprises: determining the vertices at coordinates corresponding to the end points of the Bezier curves from the path data; determining the control points of the Bezier curves from the path data; generating, within the bidirectional intermediate representation, the edges comprising the control points connecting the vertices according to connected Bezier curves in the vector image; determining a set of contours comprising one or more primitive sequences forming one or more closed paths in the vector image; and generating a mapping of the set of contours to corresponding vertices and corresponding edges of the bidirectional intermediate representation.
6. The computer-implemented method of claim 5, wherein generating the edges comprises determining the vertices and the edges by utilizing a k-d tree representation of the path data of the Bezier curves to merge a subset of end points of the plurality of paths as a shared point according to a parameterizable radius.
7. The computer-implemented method of claim 1, wherein generating the bidirectional intermediate representation comprises: determining a sequence of paths that forms a closed path in the vector image; and determining a set of contours that map the sequence of paths to corresponding edges of the bidirectional intermediate representation with color information indicating fill data for the closed path.
8. The computer-implemented method of claim 1, wherein converting the first path representation to the second path representation comprises: receiving a request to perform an image editing operation on the vector image utilizing an image editing tool associated with the second path representation; converting the first path representation to the second path representation in response to determining that image editing tool is associated with the second path representation; and performing, via the image editing tool, the image editing operation utilizing the second path representation in response to converting the first path representation to the second path representation.
9. The computer-implemented method of claim 8, further comprising: determining, in response to performing the image editing operation, an updated bidirectional intermediate representation of the vector image according to one or more changes to the second path representation; and generating an updated first path representation utilizing the updated bidirectional intermediate representation.
10. A system comprising: one or more memory devices; and one or more processors configured to cause the system to: determine, for a vector image comprising a plurality of paths, a first path representation of the plurality of paths comprising a set of junctions corresponding to shared points in the vector image and pairs of junctions corresponding to primitives; generate, from the first path representation, a bidirectional intermediate representation of a vector image comprising vertices at the set of junctions connected by edges representing the primitives according to the pairs of junctions; generate, utilizing the bidirectional intermediate representation in connection with a request to perform an image editing operation on the vector image, a second path representation of the plurality of paths by generating path data according to the vertices while traversing the edges of the bidirectional intermediate representation; and perform the image editing operation according to the path data from the second path representation.
11. The system of claim 10, wherein the one or more processors are configured to cause the system to generate the second path representation by: determining that the image editing operation corresponds to an image editing tool that modifies data in a path space corresponding to the second path representation; and converting the first path representation to the second path representation in response to determining that the image editing operation corresponds to the image editing tool.
12. The system of claim 11, wherein the one or more processors are configured to cause the system to: determine one or more changes to the second path representation in the path space corresponding to the second path representation based on the image editing operation; and generate an updated bidirectional intermediate representation based on the one or more changes to the second path representation.
13. The system of claim 10, wherein the one or more processors are configured to cause the system to: determine the first path representation as a vector network graph comprising the set of junctions and the pairs of junctions; and generate, utilizing the bidirectional intermediate representation, the second path representation as a plurality of Bezier curves comprising end points based on the vertices and control points based on the primitives.
14. The system of claim 10, wherein the one or more processors are configured to cause the system to generate the bidirectional intermediate representation by: determining, from the first path representation, one or more primitives that form a closed path in the vector image; determining color information indicating fill data for the closed path; and generating a set of contours that map the one or more primitives to one or more edges of the bidirectional intermediate representation with the color information.
15. The system of claim 14, wherein the one or more processors are configured to cause the system to: generate the second path representation by iterating through the set of contours to construct a closed path object including one or more Bezier curves from the one or more edges; and assign the color information to the one or more Bezier curves based on the set of contours in the bidirectional intermediate representation.
16. The system of claim 10, wherein the one or more processors are configured to cause the system to generate the bidirectional intermediate representation by generating a data structure comprising the vertices including coordinates of the set of junctions and the edges with primitive types and control points of the primitives.
17. A non-transitory computer readable medium storing instructions thereon that, when executed by at least one processor, cause the at least one processor to perform operations comprising: determining, for a vector image comprising a plurality of paths, a first path representation of the plurality of paths comprising path data including end points and control points of the plurality of paths; generating, from the first path representation, a bidirectional intermediate representation of a vector image comprising vertices of the end points connected by edges representing the plurality of paths according to the control points of the plurality of paths; and generating, utilizing the bidirectional intermediate representation, a second path representation of the plurality of paths comprising a graph including a set of junctions corresponding to the vertices and primitives corresponding to the edges.
18. The non-transitory computer readable medium of claim 17, wherein generating the bidirectional intermediate representation comprises: determining that a first end point of the path data is within a threshold distance of a second end point of the path data; and merging the first end point and the second end point as a single vertex.
19. The non-transitory computer readable medium of claim 17, wherein generating the bidirectional intermediate representation comprises: determining that one or more paths of the plurality of paths form a closed path according to the path data of the first path representation; determining color information associated with the one or more paths; and determining a set of contours that map an edge sequence corresponding to the one or more paths to a primitive sequence with color information indicating fill data for the closed path.
20. The non-transitory computer readable medium of claim 17, wherein generating the second path representation comprises: detecting an image editing operation that modifies the first path representation according to one or more changes to the path data; generating an updated bidirectional intermediate representation based on the one or more changes to the path data; and generating an updated second path representation utilizing the updated bidirectional intermediate representation.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
[0003] Various embodiments will be described and explained with additional specificity and detail through the use of the accompanying drawings.
[0004]
[0005]
[0006]
[0007]
[0008]
[0009]
[0010]
[0011]
[0012]
[0013]
[0014]
DETAILED DESCRIPTION
[0015] One or more embodiments of the present disclosure include a bidirectional vector representation system that uses a bidirectional intermediate representation to convert between different representations of a vector image. Specifically, the bidirectional vector representation system utilizes vector image data to generate a bidirectional intermediate representation of a vector image by determining vertices corresponding to points connecting paths and edges corresponding to the paths between the points. By generating the bidirectional intermediate representation, the bidirectional vector representation system provides a bridge between a plurality of different representations (e.g., data structures) of the vector image. For example, the bidirectional vector representation system utilizes the bidirectional intermediate representation to convert between Bezier curves and vector network graphs.
[0016] As mentioned, the bidirectional vector representation system generates a bidirectional intermediate representation for use as a bridge between a plurality of different representations of a vector image. In one or more embodiments, the bidirectional vector representation system generates the bidirectional intermediate representation from a vector network graph representation of the vector image for converting to a legacy path representation (e.g., using Bezier curves). For example, the bidirectional vector representation system determines a set of junctions corresponding to shared points in the vector image and pairs of junctions corresponding to primitives. The bidirectional vector representation system generates the bidirectional intermediate representation by generating vertices and edges in a graph representation of the vector image based on the set of junctions and primitives, respectively.
[0017] In some embodiments, the bidirectional vector representation system generates the bidirectional intermediate representation from a legacy path representation for converting to a vector network graph representation. For instance, the bidirectional vector representation system determines end points and control points of Bezier curves in the vector image. The bidirectional vector representation system generates the bidirectional intermediate representation by generating vertices and edges in a graph representation of the vector image based on the end points and control points, respectively.
[0018] Additionally, the bidirectional vector representation system utilizes the bidirectional intermediate representation to convert from a vector network graph representation to a legacy path representation or vice-versa. To illustrate, the bidirectional vector representation system converts the bidirectional intermediate representation to a legacy path representation by utilizing an edge visitor to visit edges in the bidirectional intermediate representation and generate end points and control points of Bezier curves. The bidirectional vector representation system converts the bidirectional intermediate representation to a vector network graph by converting vertices to junctions and edges to primitives for pairs of junctions. In some embodiments, the bidirectional vector representation system also generates the bidirectional intermediate representation to include separately stored edge sequences that store color information for closed paths for use in converting between vector network graphs and Bezier curves.
[0019] Conventional systems that provide vector image editing are configured to operate on vector images with legacy path representations. Specifically, conventional systems typically utilize editing tools (e.g., digital pens/pencils, erasers) configured to work with Bezier curves. For example, the conventional systems store new path data as Bezier curves (e.g., via anchor points and control points) and access Bezier curve data to apply one or more modifications to the path data based on interactions via various image editing tools. Although such tools are useful for generating and interacting with legacy path representations of vector images, conventional systems that rely solely on legacy path representations are limited in flexibility. More specifically, the conventional systems are unable to connect multiple paths at a single shared point (e.g., a junction) due to constraints on the legacy path representations.
[0020] Additionally, due to their inability to connect multiple paths at shared points, conventional systems also lack accuracy and usability in generating/displaying vector image content. For instance, when creating and rendering a vector image with multiple converging paths using legacy path representations, creating multiple path sets that converge at a single point result in disjoint sets of objects. Furthermore, minor errors or differences in positions of end points of the converging paths result in visual artifacts when rendering the disjoint sets of objects, such as extra edges/boundaries or misaligned paths.
[0021] The bidirectional vector representation system provides a number of advantages in computing systems that edit vector images. For example, the bidirectional vector representation system provides accurate and flexible editing of vector images using a plurality of different representations of vector image data. In contrast to conventional systems that provide vector image editing for only legacy path representations, the bidirectional vector representation system provides vector image editing utilizing legacy path representations and vector network graph representations. In particular, the bidirectional vector representation system generates a bidirectional intermediate representation for converting between legacy paths and vector network graphs for a single vector image. Thus, the bidirectional vector representation system improves the flexibility of vector image operations by utilizing the bidirectional intermediate representation to convert between the different representations depending on the specific tool or operation. Additionally, the bidirectional vector representation system provide backward compatibility with older data structures to provide seamless transition experiences in graphical user interfaces for users.
[0022] Furthermore, the bidirectional vector representation system provides improved accuracy in vector images. Specifically, the bidirectional vector representation system utilizes a bidirectional intermediate representation of a vector image to provide access to tools interacting with legacy paths while also leveraging the accuracy advantages of vector network graphs. To illustrate, in contrast to conventional systems that rely on legacy paths for vector images, the bidirectional vector representation system converts between legacy paths and vector network graphs to provide the rendering accuracy of shared points (e.g., junctions) for operations involving Bezier curves. Thus, the bidirectional vector representation system utilizes bidirectional intermediate representations to reduce or eliminate rendering artifacts at points where multiple paths meet in vector images.
[0023] The bidirectional vector representation system also provides improved digital storage via the use of bidirectional intermediate representations. For example, the bidirectional vector representation system manages the consumption of memory via bidirectional intermediate representations at runtime. In particular, the bidirectional vector representation system stores the processed paths/primitives during bridge operations such that the bidirectional vector representation system is able to remove the paths/primitives after processing to minimize memory usage.
[0024] Turning now to the figures,
[0025] As shown in
[0026] According to one or more embodiments, the digital image system 110 utilizes the bidirectional vector representation system 102 to edit vector images. In particular, the bidirectional vector representation system 102 generates a bidirectional intermediate representation to convert different representations of vector image data of a vector image in connection with various image editing operations. In particular, the bidirectional vector representation system 102 utilizes the bidirectional intermediate representation to convert between vector network graph representations of vector images to legacy path representations (e.g., Bezier curves), and vice-versa, in connection with performing various operations that are incompatible with one or the other representation. To illustrate, the bidirectional vector representation system 102 generates a bidirectional intermediate representation to convert between separate representations of a vector image in connection with utilizing certain tools that are incompatible with tools configured to operate on legacy paths. In one or more embodiments, the digital image system 110 provides the vector image to the client device 106 via the digital image application 112, such as for display and/or downstream operations.
[0027] As illustrated in
[0028] In additional embodiments, although
[0029] To illustrate, the bidirectional vector representation system 102 includes a web hosting application that allows the client device 106 to interact with content and services hosted on the server device(s) 104 (e.g., in a software as a service implementation). To illustrate, in one or more implementations, the client device 106 accesses a web page supported by the server device(s) 104. The client device 106 provides input to the server device(s) 104 to view information for image editing tasks and, in response, the bidirectional vector representation system 102 or the digital image system 110 on the server device(s) 104 performs operations to edit vector images via a bidirectional intermediate representation. The server device(s) 104 provide the output or results of the operations to the client device 106.
[0030] In one or more embodiments, the server device(s) 104 include a variety of computing devices, including those described below with reference to
[0031] In addition, as shown in
[0032] Additionally, as shown in
[0033] As mentioned, the bidirectional vector representation system 102 utilizes a bidirectional intermediate representation to convert between different representations of a vector image for various vector image operations.
[0034] In one or more embodiments, the bidirectional vector representation system 102 determines a vector image 200. Specifically, the vector image 200 includes visual information represented as paths and points. For example, the vector image 200 includes paths that form objects according to various ways of representing the paths, as described in more detail below. To illustrate, the vector image 200 includes one or more objects, each object made up of one or more paths and including end points that define the bounds of the paths. Furthermore, in one or more embodiments, a path in a vector image includes a shape (e.g., straight line, curve(s)) indicating a direction of the path.
[0035] As mentioned, in one or more embodiments, the vector image 200 is associated with one or more path representations that indicate how to store path data defining the paths and points in the vector image 200. Specifically, a path representation of a vector image 200 includes a data structure that stores visual information of the vector image 200 based on one or more paths in the vector image 200. For example, a path representation includes data indicating positions of points and shapes of paths between the points. Different path representations of a single vector image include different types of data structures to represent the same vector image data, such as legacy paths (e.g., Bezier curves) or vector network graphs.
[0036] In one or more embodiments, as illustrated in
[0037] According to one or more embodiments, the vector network graph 202 includes a nonlinear graph representation of paths in the vector image 200 utilizing junctions and primitives corresponding to pairs of junctions. In some embodiments, the vector network graph 202 does not store information about adjacency of the paths to improve speed and efficiency of processing the vector image 200. According to one or more implementations, the vector network graph 202 includes a nonlinear graph of vector image data as described in NONLINEAR REPRESENTATIONS FOR VECTOR OBJECTS, U.S. application Ser. No. 17/960,582, filed Oct. 5, 2022, which is herein incorporated by reference in its entirety.
[0038] Additionally, according to one or more embodiments, the Bezier curves 204 correspond to legacy path data including parametric curve representations of paths in the vector image 200. For example, a Bezier curve includes end points and control points defining the position and shapes of a path. To illustrate, a legacy path representation includes a plurality of anchor points indicating the end points of one or more curves. Additionally, a legacy path representation includes control points that define a smooth, continuous curve via a mathematical calculation based on positions of the control points and anchor points.
[0039] As illustrated in
[0040] In one or more additional embodiments, the bidirectional vector representation system 102 utilizes the bidirectional intermediate representation 206 to convert between different representations of the vector image 200 for various purposes. For instance, the bidirectional vector representation system 102 utilizes the bidirectional intermediate representation 206 to convert from the vector network graph 202 to the Bezier curves 204 in connection with utilizing a tool that is not configured to work with vector network graphs. Additionally, in some embodiments, the bidirectional vector representation system 102 utilizes the bidirectional intermediate representation 206 to convert from the Bezier curves 204 to the vector network graph 202 in connection with saving a file including the vector image 200 or for use with one or more additional tools.
[0041] In various embodiments, the bidirectional vector representation system 102 converts between different representations of a vector image via a bidirectional intermediate representation of the vector image.
[0042] As mentioned, in some embodiments, the bidirectional vector representation system 102 utilizes a bidirectional intermediate representation to convert from a vector network graph representation to a legacy path representation.
[0043] Additionally, as illustrated, the bidirectional vector representation system 102 determines junction pairs 304 corresponding to primitives. Specifically, the bidirectional vector representation system 102 determines a pair of junctions (i.e., two junctions of the junctions 302) that have a primitive connecting the pair of junctions. For example, the bidirectional vector representation system 102 determines primitives including arbitrary parametrizable curves such as lines, cubic Bezier curves, circular arcs, etc. Accordingly, the bidirectional vector representation system 102 stores the vector network graph 300 as a nonlinear graph including the junctions 302 and the junction pairs 304 (with corresponding primitives). In additional embodiments, the bidirectional vector representation system 102 also stores primitive sequences 306 (if applicable) in the vector network graph 300 based on connected primitives that form closed paths including specific color information (e.g., color fill information).
[0044] In one or more embodiments, the bidirectional vector representation system 102 generates a bidirectional intermediate representation 308 based on the vector network graph 300. For example, the bidirectional vector representation system 102 generates the bidirectional intermediate representation 308 in response to a request to perform a particular operation on the vector image represented by the vector network graph 300. To illustrate, the bidirectional vector representation system 102 generates the bidirectional intermediate representation 308 in response to a selection of an image editing tool that is incompatible with vector network graphs and is compatible with Bezier curves (or other splines such as b-splines). In additional embodiments, the bidirectional vector representation system 102 generates the bidirectional intermediate representation 308 for the vector image in response to creation of the vector image (e.g., in preparation for future operations possibly requiring other path representations).
[0045] As illustrated in coordinates, and the edges 312 include information about the type of primitive and data corresponding to the curve such as control points.
[0046] In one or more additional embodiments, the bidirectional vector representation system 102 determines an edge sequence mapping 314 corresponding to the primitive sequences 306 of the vector network graph 300. In particular, the bidirectional vector representation system 102 generate a separate mapping that maps the primitives indicated by the primitive sequences 306 to corresponding edges in the bidirectional intermediate representation 308. Thus, the bidirectional vector representation system 102 stores an edge sequence that maps each primitive sequence to a corresponding edge sequence with corresponding color information, such that the bidirectional intermediate representation 308 includes the vertices 310, the edges 312, and the edge sequence mapping 314. Additionally, in some embodiments, the bidirectional vector representation system 102 generates the bidirectional intermediate representation 308 based on a plurality of vector network graphs (e.g., one vector network graph for each vector object in the vector image).
[0047] In one or more embodiments, the bidirectional vector representation system 102 converts the bidirectional intermediate representation 308 to a legacy path representation of vector objects in the vector image. As illustrated in
[0048] In additional embodiments, the bidirectional vector representation system 102 determines closed path objects 324 based on the edge sequence mapping 314. In particular,
[0049] Additionally, in some embodiments, the bidirectional vector representation system 102 converts from a legacy path representation to a vector network graph. For instance,
[0050] In connection with converting a path representation of a vector image from a legacy path representation to a vector network graph representation,
[0051] Furthermore, as previously described, the bidirectional vector representation system 102 determines closed path objects 406 formed by a subset of Bezier curves. In particular, the bidirectional vector representation system 102 determines whether one or more Bezier curves form a closed path. For example, the bidirectional vector representation system 102 identifies individual curves that form closed paths (e.g., a single Bezier curve forming a circle) or sequences of curves that form closed paths. The bidirectional vector representation system 102 also determines color information (e.g., fill data 408) for the closed path object.
[0052] According to one or more embodiments, the bidirectional vector representation system 102 converts the Bezier curves 400 to a vector network graph representation via a bidirectional intermediate representation 410. Specifically, the bidirectional vector representation system 102 generates the bidirectional intermediate representation 410 from the Bezier curves 400 by converting points and curves to vertices 412 and edges 414. More specifically, the bidirectional vector representation system 102 adds the end points 402 as the vertices 412 and stores the control points 404 (and other control data) in the edges 414 of the bidirectional intermediate representation 410.
[0053] Additionally, in some embodiments, the bidirectional vector representation system 102 determines points in the Bezier curves 400 that likely belong to shared points. In particular, as noted, legacy path representations are not compatible with shared points corresponding to junctions (e.g., end points that belong to more than two curves). Accordingly, the bidirectional vector representation system 102 attempts to merge end points that are near to each other as a single point. For example, as described in more detail with respect to
[0054] In one or more embodiments, the bidirectional vector representation system 102 converts the closed path objects 406 to an edge sequence mapping 418 indicating one or more sequences of edges that form closed paths. For instance, the bidirectional vector representation system 102 determines one or more connected Bezier curves that form a closed path and generate an edge sequence corresponding to the connected curve(s). Furthermore, the bidirectional vector representation system 102 stores information about the fill data 408 and/or other color information with the edge sequence mapping 418. In one or more embodiments, the bidirectional vector representation system 102 stores the edge sequence mapping 418 to indicate a set of contours separate from the vertices 412 and the edges 414 to indicate one or more vertices/edges that form closed paths for use in reconstructing a different path representation.
[0055]
[0056] In one or more embodiments, the bidirectional vector representation system 102 utilizes previously stored information to convert the Bezier curves 400 to the vector network graph 420. Specifically, the bidirectional vector representation system 102 utilizes a previously generated edge sequence mapping based on a previous conversion from a vector network graph to Bezier curves (e.g., as in
[0057] As mentioned, in one or more embodiments, the bidirectional vector representation system 102 merges nearby points when converting from a set of Bezier curves to a vector network graph.
[0058] As illustrated in
[0059] In response to determining the coordinate 506, the bidirectional vector representation system 102 utilizes the coordinate 506 to determine a vertex identifier for the end point 504. In one or more embodiments, as illustrated in
[0060] Furthermore, in some embodiments, the bidirectional vector representation system 102 determines whether the existing vertex 510 has a similar coordinate to the coordinate 506 of the end point 504. In particular, the bidirectional vector representation system 102 determines whether the k-d tree 508 has any vertices with coordinates within a threshold distance (e.g., a radius 512) of the coordinate 506. For instance, the bidirectional vector representation system 102 determines whether there are any end points in the k-d tree 508 with coordinates within an open ball B.sub.(p) of radius to an existing point p. If so, the bidirectional vector representation system 102 merges the points within the radius 512 into a single vertex (e.g., the existing vertex 510). Furthermore, in some embodiments, the radius 512 is parameterizable, such that a user can specify the radius 512 by interacting with a radius value within a graphical user interface.
[0061] In one or more additional embodiments, the bidirectional vector representation system 102 adds a new vertex 514 to the k-d tree 508 (and the bidirectional intermediate representation) based on coordinates for an end point. For example, in response to determining that the coordinate 506 of the end point 504 is not in the k-d tree 508 or within the radius 512 of the existing vertex, the bidirectional vector representation system 102 generates the new vertex 514. Additionally, the bidirectional vector representation system 102 adds coordinates associated with the new vertex 514 to the k-d tree 508 for use in determining whether the new vertex 514 corresponds to any other end points in the vector image.
[0062] In some embodiments, the bidirectional vector representation system 102 generates edge data 516 based on the vertices in the k-d tree 508. Specifically, the bidirectional vector representation system 102 adds information associated with the Bezier curve 502 to an edge in the bidirectional intermediate representation as the edge data 516. For example, the bidirectional vector representation system 102 stores control data (e.g., control points) and color information associated with the Bezier curve 502 to the edge. Additionally, by generating the bidirectional intermediate representation as a graph that links edges to vertices based on the corresponding Bezier curves, the bidirectional vector representation system 102 stores relational information for Bezier curves in the bidirectional intermediate representation.
[0063] In one or more embodiments, as mentioned, the bidirectional vector representation system 102 stores an edge sequence corresponding to closed paths as a separate mapping for use in determining fill data for closed path objects. The bidirectional vector representation system 102 generates edge sequence mappings for connected Bezier curves to use in creating primitive sequences when converting the bidirectional intermediate representation to one or more vector network graphs (e.g., for faster lookup). In some embodiments, the bidirectional vector representation system 102 ignores fill data for open paths corresponding to fill functions in legacy path representations. Alternatively, in some embodiments, the bidirectional vector representation system 102 auto-completes an open path by creating a hidden Bezier curve (e.g., not visible within a graphical user interface) that completes a closed path and a corresponding edge sequence in the bidirectional intermediate representation. The bidirectional vector representation system 102 generates a hidden primitive and stores the color information with a corresponding primitive sequence.
[0064]
[0065] In one or more embodiments, in connection with generating a bidirectional intermediate representation from a legacy path representation, the bidirectional vector representation system 102 utilizes coordinates of an end point to determine whether a corresponding vertex already exists. For example, the bidirectional vector representation system 102 obtains the coordinates of the first end point 604 when processing the first Bezier curve 600a. Additionally, the bidirectional vector representation system searches for the coordinates of the first end point 604 in a list of existing vertices (e.g., in a k-d tree or a lookup list).
[0066] As noted previously, in some embodiments, the bidirectional vector representation system 102 to determine whether an existing vertex is an exact match or an approximate match to the first end point 604. Specifically, the bidirectional vector representation system 102 determines whether there are any existing vertices within a threshold distance 608 of the first end point 604. For instance, the bidirectional vector representation system 102 compares the coordinates of the first end point 604 to coordinates of existing vertices utilizing the lookup data structure. In response to determining that an existing vertex corresponds to the first end point 604 (e.g., an existing vertex for the second end point 606 is within the threshold distance 608 of the first end point 604), the bidirectional vector representation system 102 merges the first end point 604 with the second end point 606.
[0067] In one or more embodiments, the bidirectional vector representation system 102 merges the first end point 604 with the second end point 606 by adjusting a position of the first end point 604 and/or a position of the second end point 606. For example, the bidirectional vector representation system 102 changes coordinates for the first end point 604 to the coordinates of the second end point 606. In an alternative example, the bidirectional vector representation system 102 changes coordinates for the first end point 604 and the second end point 606, such as by moving both end points to a midpoint between the first end point 604 and the second end point 606.
[0068] As illustrated in
[0069] Although
[0070] In one or more embodiments, when merging end points, the bidirectional vector representation system 102 does not modify the legacy path representation when merging end points of different Bezier curves initially. Instead, the bidirectional vector representation system 102 merges the points in the bidirectional intermediate representation, which results in merged points when converting to a vector network graph. Additionally, when converting from the vector network graph back to Bezier curves, the bidirectional vector representation system 102 generates the Bezier curves including end points with the modified positions (e.g., coincident coordinates) according to the vertices as stored in the bidirectional intermediate representation.
[0071] According to one or more embodiments, when converting from a vector network graph representation to a legacy path representation, the bidirectional vector representation system 102 combines two or more primitives from the vector network graph into a single Bezier curve.
[0072] For example,
[0073] In some embodiments, as mentioned, the bidirectional vector representation system 102 utilizes an edge visitor to visit edges in the bidirectional intermediate representation representing the primitives and junctions. The bidirectional vector representation system 102 utilizes the edge visitor to run for the entire bidirectional intermediate representation and, in response to determining that a particular vertex has a single connected edge, the bidirectional vector representation system 102 generates/stores the corresponding Bezier data in an array and marks the edge as visited. Accordingly, when generating a Bezier curve from the bidirectional intermediate representation, the bidirectional vector representation system 102 utilizes the array of Bezier data to generate the output curve. As illustrated in
[0074] Furthermore, when combining primitives in such a way, the bidirectional vector representation system 102 simplifies the color information stored for the Bezier curves. For instance, the bidirectional vector representation system 102 determines whether primitives connected as in
[0075]
[0076] In connection with converting the first vector image object 802 between different path representations, the bidirectional vector representation system 102 utilizes a bidirectional intermediate representation as described previously. In particular, the bidirectional intermediate representation includes an edge sequence that maps the one or more paths in a path representation (e.g., one or more primitives in a vector network graph representation) to one or more edges in the bidirectional intermediate representation. The bidirectional vector representation system 102 stores the fill data with the edge sequence mapping for use in converting to a different path representation (e.g., a legacy path representation including Bezier curves).
[0077] According to one or more embodiments, the bidirectional vector representation system 102 converts one or more vector path objects of the vector image to a different path representation in response to a request to perform one or more operations on the vector image. For example, in response to a selection of a particular image editing tool that is incompatible with a current path representation of the vector image, the bidirectional vector representation system 102 converts the vector image to a different path representation. To illustrate, in response to determining that an eraser tool 804 is incompatible with vector network graphs, the bidirectional vector representation system 102 converts vector network graphs corresponding to the vector images in the vector image to Bezier curves. Thus, interactions with the components of the vector image with the eraser tool 804 cause the client device to perform such interactions on the Bezier curves, rather than the vector network graphs.
[0078] For example, as illustrated in
[0079] According to various embodiments, as described above, the bidirectional vector representation system 102 utilizes a bidirectional intermediate representation to convert between different path representations of a vector image. In one or more embodiments, the bidirectional vector representation system 102 converts from vector network graph representations to legacy path representations utilizing Algorithm 1 below:
TABLE-US-00001 Algorithm 1 Vector Network To Legacy Paths Require: VN = set of all Junctions, Primitives, Contours, J, P, C for all j J do V = V {v} Prepare v and insert in V end for for all p P do E = E {e}
Create e = {v.sub.i, v.sub.j} and insert in E end for for all c C do C = C {c}
Create c = {e.sub.i, e.sub.j, e.sub.k, ...} and insert in C end for Ensure: G = {V, E, C}
Intermediate Representation Require: Run edge visitor 1. Process unvisited edge, e.sub.i = {v.sub.i, v.sub.j}, to check if either vertex has a single outgoing edge 2. Fetch the single outgoing edge e.sub.k, merge into single path and mark edge as visited 3. Also store the merged path path.sub.i with start-end points in a k-d tree 4. Check if end-points of the current merged path path.sub.i exists in k-d tree 5. If there is an end-point match with an existing path path.sub.j, merge path.sub.i and path.sub.j into path.sub.k 6. Remove end point coordinates for path.sub.i and add coordinates for path.sub.k in k-d tree Ensure: Path = {path.sub.i, path.sub.j, path.sub.k, ...} for all c C do fi = {bez.sub.i, bez.sub.j, bez.sub.k, ...}
Process edge sequence c, and generate bezier curve sequence Face = Face {f.sub.i}
Append closed curves, faces to a set end for Ensure: Face = {f.sub.i, f.sub.j, f.sub.k, ...} Generate Stroke paths with empty fill for each path Path Generate closed curves with corresponding fill color for each face Face
[0080] Furthermore, in one or more embodiments, the bidirectional vector representation system 102 converts from legacy path representations to vector network graph representations utilizing Algorithm 2 below:
TABLE-US-00002 Algorithm 2 Legacy Paths to Vector Network Require: LP = set of open and closed paths OL, CL for all ol OL do 1. Process path segments in the open path to generate bezier curves 2. Add end points of each curve in a k-d tree 3. V = V {v} For every unique end point, generate v 4. If a nearby end point already exists, extract the vertex v 5. E = E {e}
Generate e = {v.sub.i, v.sub.j}, edges will always be unique end for for all cl CL do 1. Process these paths exactly as done for OL 2. Construct C = C {c}
Create c = {ei, ej, ek, ...} and insert in C 3. Also construct E2C : e.sub.i > c.sub.j, map for lookup later. end for Ensure: G = {V, E, C}
Intermediate Representation Require: Finding set of all connected components(isolated subgraphs) in graph for all cc G do 1. Create a new VN 2. Process each edge e.sub.i in the current subgraph 3. Add vertex j.sub.v and control j.sub.c junctions, J = J {j.sub.vi, ..., j.sub.ei, ...} 4. Add primitive P {p.sub.i} 5. If a contour, c.sub.j exists for e.sub.i, store the contour sequences in VN as well and mark contour c.sub.j as processed. end for Ensure: VN = {VN.sub.i, VN.sub.j, VN.sub.k, ...} for each connected component
[0081]
[0082] In one or more embodiments, each of the components of the bidirectional vector representation system 102 is in communication with other components using any suitable communication technologies. Additionally, the components of the bidirectional vector representation system 102 are capable of being in communication with one or more other devices including other computing devices of a user, server devices (e.g., cloud storage devices), licensing servers, or other devices/systems. It will be recognized that although the components of the bidirectional vector representation system 102 are shown to be separate in
[0083] In some embodiments, the components of the bidirectional vector representation system 102 include software, hardware, or both. For example, the components of the bidirectional vector representation system 102 include one or more instructions stored on a computer-readable storage medium and executable by processors of one or more computing devices (e.g., the computing device(s) 900). When executed by the one or more processors, the computer-executable instructions of the bidirectional vector representation system 102 cause the computing device(s) 900 to perform the operations described herein. Alternatively, the components of the bidirectional vector representation system 102 include hardware, such as a special purpose processing device to perform a certain function or group of functions. Additionally, or alternatively, the components of the bidirectional vector representation system 102 include a combination of computer-executable instructions and hardware.
[0084] Furthermore, the components of the bidirectional vector representation system 102 performing the functions described herein with respect to the bidirectional vector representation system 102 may, for example, be implemented as part of a stand-alone application, as a module of an application, as a plug-in for applications, as a library function or functions that may be called by other applications, and/or as a cloud-computing model. Thus, the components of the bidirectional vector representation system 102 may be implemented as part of a stand-alone application on a personal computing device or a mobile device. Alternatively, or additionally, the components of the bidirectional vector representation system 102 may be implemented in any application that provides digital image editing, including, but not limited to ADOBE ILLUSTRATOR and ADOBE CREATIVE CLOUD software.
[0085] As illustrated, the bidirectional vector representation system 102 includes a vector image manager 902 to manage digital images for image editing operations. In particular, the vector image manager 902 accesses digital images (e.g., vector images) for editing based on user inputs providing the digital images or accessing the digital images from a database of images. Additionally, the vector image manager 902 manages the display of image content within a digital image application in connection with various image editing tools.
[0086] The vector image manager 902 includes a vector network graph manager 904 and a Bezier curve manager 906. In particular, the vector network graph manager 904 generates, obtains, or otherwise accesses vector network graph representations of vector images. For example, the vector network graph manager 904 generates vector network graph representations of vector images including junctions and pairs of junctions (e.g., corresponding to primitives) to represent paths and objects in the vector images. Additionally, the Bezier curve manager 906 generates, obtains, or otherwise accesses legacy path representations of vector images. For instance, the Bezier curve manager 906 generates Bezier curves including end points and control points or other control data to represent paths and objects in the vector images.
[0087] The bidirectional vector representation system 102 includes an intermediate representation manager 908 to manage bidirectional intermediate representations for vector images. Specifically, the intermediate representation manager 908 generates bidirectional intermediate representations for digital images for converting between vector network graphs and Bezier curves. For instance, the intermediate representation manager 908 generates a bidirectional intermediate representation from one or more vector network graphs or from one or more sets of Bezier curves.
[0088] The bidirectional vector representation system 102 also includes a conversion manager 910 to convert between different path representations of vector images. For instance, the conversion manager 910 utilizes bidirectional intermediate representations from the intermediate representation manager 908 to convert from vector network graphs to Bezier curves. Additionally, the conversion manager 910 utilizes bidirectional intermediate representations from the intermediate representation manager 908 to convert from Bezier curves to vector network graphs.
[0089] The bidirectional vector representation system 102 also includes a data storage manager 912 (that comprises a non-transitory computer memory) that stores and maintains data associated with editing vector images utilizing a plurality of path representations. For example, the data storage manager 912 stores vector network graphs, Bezier curves, and bidirectional intermediate representations of vector images. Additionally, the data storage manager 912 stores data associated with converting between different representations, including k-d trees, lookup tables, mappings, and an edge visitor (e.g., computer code for performing functions for traversing bidirectional intermediate representations).
[0090] Turning now to
[0091] As shown, the series of acts 1000 includes act 1002 of generating a bidirectional intermediate representation of a vector image. In one or more embodiments, act 1002 includes act 1004 of determining vertices at points of paths in the vector image. Furthermore, act 1002 includes act 1006 of determining pairs of points connected by primitives. The series of acts 1000 also includes act 1008 of converting a first path representation to a second path representation utilizing the bidirectional intermediate representation.
[0092] In one or more embodiments, act 1004 involves determining vertices at points of a plurality of paths in a vector image. Additionally, act 1006 involves determining pairs of points connected by primitives corresponding to the plurality of paths. In one or more embodiments, act 1002 involves generating a bidirectional intermediate representation of a vector image comprising the vertices at the points connected by edges representing the primitives according to the pairs of points. Furthermore, act 1008 involves converting a first path representation of the plurality of paths of the vector image to a second path representation of the plurality of paths of the vector image utilizing the bidirectional intermediate representation.
[0093] In one or more embodiments, the series of acts 1000 includes determining a set of junctions and pairs of junctions in a vector network graph corresponding to the first path representation. Additionally, the series of acts 1000 includes converting the first path representation to the second path representation by converting the set of junctions and the pairs of junctions in the vector network graph of the first path representation to Bezier curves according to the vertices while traversing the edges of the bidirectional intermediate representation.
[0094] In one or more embodiments, the series of acts 1000 includes determining the vertices at coordinates corresponding to the set of junctions from the vector network graph. The series of acts 1000 includes determining the primitives comprising parameterizable curves corresponding to the pairs of junctions from the vector network graph. Additionally, the series of acts 1000 includes generating, within the bidirectional intermediate representation, the edges representing the primitives connecting the vertices according to the parameterizable curves. The series of acts 1000 further includes determining a set of contours comprising one or more primitive sequences forming one or more closed paths in the vector image. Additionally, the series of acts 1000 includes generating a mapping of the set of contours to corresponding vertices and corresponding edges of the bidirectional intermediate representation.
[0095] In one or more embodiments, the series of acts 1000 includes determining path data for Bezier curves including end points and control points of the Bezier curves in the first path representation. Additionally, the series of acts 1000 includes converting the first path representation to the second path representation by converting the path data of the Bezier curves including the end points and the control points of the plurality of paths in the first path representation to a vector network graph comprising a set of junctions and pairs of junctions.
[0096] In some embodiments, the series of acts 1000 includes determining the vertices at coordinates corresponding to the end points of the Bezier curves from the path data. The series of acts 1000 also includes determining the control points of the Bezier curves from the path data. The series of acts 1000 further includes generating, within the bidirectional intermediate representation, the edges comprising the control points connecting the vertices according to connected Bezier curves in the vector image. Additionally, the series of acts 1000 includes determining a set of contours comprising one or more primitive sequences forming one or more closed paths in the vector image. Furthermore, the series of acts 1000 includes generating a mapping of the set of contours to corresponding vertices and corresponding edges of the bidirectional intermediate representation.
[0097] According to one or more embodiments, the series of acts 1000 includes generating the edges by determining the vertices and the edges by utilizing a k-d tree representation of the path data of the Bezier curves to merge a subset of end points of the plurality of paths as a shared point according to a parameterizable radius.
[0098] In one or more embodiments, the series of acts 1000 includes determining a sequence of paths that forms a closed path in the vector image. The series of acts 1000 also includes determining a set of contours that map the sequence of paths to corresponding edges of the bidirectional intermediate representation with color information indicating fill data for the closed path.
[0099] In one or more embodiments, the series of acts 1000 includes receiving a request to perform an image editing operation on the vector image utilizing an image editing tool associated with the second path representation. The series of acts 1000 also includes converting the first path representation to the second path representation in response to determining that image editing tool is associated with the second path representation. The series of acts 1000 further includes performing, via the image editing tool, the image editing operation utilizing the second path representation in response to converting the first path representation to the second path representation.
[0100] In one or more embodiments, the series of acts 1000 includes determining, in response to performing the image editing operation, an updated bidirectional intermediate representation of the vector image according to one or more changes to the second path representation. Additionally, the series of acts 1000 includes generating an updated first path representation utilizing the updated bidirectional intermediate representation.
[0101] In one or more embodiments, the series of acts 1000 includes determining, for a vector image comprising a plurality of paths, a first path representation of the plurality of paths comprising a set of junctions corresponding to shared points in the vector image and pairs of junctions corresponding to primitives. The series of acts 1000 includes generating, from the first path representation, a bidirectional intermediate representation of a vector image comprising vertices at the set of junctions connected by edges representing the primitives according to the pairs of junctions. The series of acts 1000 further includes generating, utilizing the bidirectional intermediate representation in connection with a request to perform an image editing operation on the vector image, a second path representation of the plurality of paths by generating path data according to the vertices while traversing the edges of the bidirectional intermediate representation. Additionally, the series of acts 1000 includes performing the image editing operation according to the path data from the second path representation.
[0102] In one or more embodiments, the series of acts 1000 includes determining that the image editing operation corresponds to an image editing tool that modifies data in a path space corresponding to the second path representation. Additionally, the series of acts 1000 includes converting the first path representation to the second path representation in response to determining that the image editing operation corresponds to the image editing tool.
[0103] In some embodiments, the series of acts 1000 includes determining one or more changes to the second path representation in the path space corresponding to the second path representation based on the image editing operation. Furthermore, the series of acts 1000 generating an updated bidirectional intermediate representation based on the one or more changes to the second path representation.
[0104] In one or more embodiments, the series of acts 1000 determining the first path representation as a vector network graph comprising the set of junctions and the pairs of junctions. Additionally, the series of acts 1000 includes generating, utilizing the bidirectional intermediate representation, the second path representation as a plurality of Bezier curves comprising end points based on the vertices and control points based on the primitives.
[0105] In one or more embodiments, the series of acts 1000 includes determining, from the first path representation, one or more primitives that form a closed path in the vector image. Additionally, the series of acts 1000 includes determining color information indicating fill data for the closed path. The series of acts 1000 also includes generating a set of contours that map the one or more primitives to one or more edges of the bidirectional intermediate representation with the color information. In some embodiments, the series of acts 1000 includes generating the second path representation by iterating through the set of contours to construct a closed path object including one or more Bezier curves from the one or more edges. Additionally, the series of acts 1000 includes assigning the color information to the one or more Bezier curves based on the set of contours in the bidirectional intermediate representation.
[0106] In one or more embodiments, the series of acts 1000 includes generating the bidirectional intermediate representation by generating a data structure comprising the vertices including coordinates of the set of junctions and the edges with primitive types and control points of the primitives.
[0107] In one or more embodiments, the series of acts 1000 includes determining, for a vector image comprising a plurality of paths, a first path representation of the plurality of paths comprising path data including end points and control points of the plurality of paths. The series of acts 1000 also includes generating, from the first path representation, a bidirectional intermediate representation of a vector image comprising vertices of the end points connected by edges representing the plurality of paths according to the control points of the plurality of paths. The series of acts 1000 also includes generating, utilizing the bidirectional intermediate representation, a second path representation of the plurality of paths comprising a graph including a set of junctions corresponding to the vertices and primitives corresponding to the edges.
[0108] In one or more embodiments, the series of acts 1000 includes determining that a first end point of the path data is within a threshold distance of a second end point of the path data. The series of acts 1000 further includes merging the first end point and the second end point as a single vertex.
[0109] In one or more embodiments, the series of acts 1000 includes determining that one or more paths of the plurality of paths form a closed path according to the path data of the first path representation. The series of acts 1000 further includes determining color information associated with the one or more paths. The series of acts 1000 also includes determining a set of contours that map an edge sequence corresponding to the one or more paths to a primitive sequence with color information indicating fill data for the closed path.
[0110] In one or more embodiments, the series of acts 1000 includes detecting an image editing operation that modifies the first path representation according to one or more changes to the path data. The series of acts 1000 also includes generating an updated bidirectional intermediate representation based on the one or more changes to the path data. Additionally, the series of acts 1000 includes generating an updated second path representation utilizing the updated bidirectional intermediate representation.
[0111] Embodiments of the present disclosure may comprise or utilize a special purpose or general-purpose computer including computer hardware, such as, for example, one or more processors and system memory, as discussed in greater detail below. Embodiments within the scope of the present disclosure also include physical and other computer-readable media for carrying or storing computer-executable instructions and/or data structures. In particular, one or more of the processes described herein may be implemented at least in part as instructions embodied in a non-transitory computer-readable medium and executable by one or more computing devices (e.g., any of the media content access devices described herein). In general, a processor (e.g., a microprocessor) receives instructions, from a non-transitory computer-readable medium, (e.g., a memory, etc.), and executes those instructions, thereby performing one or more processes, including one or more of the processes described herein.
[0112] Computer-readable media can be any available media that can be accessed by a general purpose or special purpose computer system. Computer-readable media that store computer-executable instructions are non-transitory computer-readable storage media (devices). Computer-readable media that carry computer-executable instructions are transmission media. Thus, by way of example, and not limitation, embodiments of the disclosure can comprise at least two distinctly different kinds of computer-readable media: non-transitory computer-readable storage media (devices) and transmission media.
[0113] Non-transitory computer-readable storage media (devices) includes RAM, ROM, EEPROM, CD-ROM, solid state drives (SSDs) (e.g., based on RAM), Flash memory, phase-change memory (PCM), other types of memory, other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store desired program code means in the form of computer-executable instructions or data structures and which can be accessed by a general purpose or special purpose computer.
[0114] A network is defined as one or more data links that enable the transport of electronic data between computer systems and/or modules and/or other electronic devices. When information is transferred or provided over a network or another communications connection (either hardwired, wireless, or a combination of hardwired or wireless) to a computer, the computer properly views the connection as a transmission medium. Transmissions media can include a network and/or data links which can be used to carry desired program code means in the form of computer-executable instructions or data structures and which can be accessed by a general purpose or special purpose computer. Combinations of the above should also be included within the scope of computer-readable media.
[0115] Further, upon reaching various computer system components, program code means in the form of computer-executable instructions or data structures can be transferred automatically from transmission media to non-transitory computer-readable storage media (devices) (or vice versa). For example, computer-executable instructions or data structures received over a network or data link can be buffered in RAM within a network interface module (e.g., a NIC), and eventually transferred to computer system RAM and/or to less volatile computer storage media (devices) at a computer system. Thus, it should be understood that non-transitory computer-readable storage media (devices) can be included in computer system components that also (or even primarily) utilize transmission media.
[0116] Computer-executable instructions comprise, for example, instructions and data which, when executed at a processor, cause a general-purpose computer, special purpose computer, or special purpose processing device to perform a certain function or group of functions. In some embodiments, computer-executable instructions are executed on a general-purpose computer to turn the general-purpose computer into a special purpose computer implementing elements of the disclosure. The computer executable instructions may be, for example, binaries, intermediate format instructions such as assembly language, or even source code. Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the described features or acts described above. Rather, the described features and acts are disclosed as example forms of implementing the claims.
[0117] Those skilled in the art will appreciate that the disclosure may be practiced in network computing environments with many types of computer system configurations, including, personal computers, desktop computers, laptop computers, message processors, hand-held devices, multi-processor systems, microprocessor-based or programmable consumer electronics, network PCs, minicomputers, mainframe computers, mobile telephones, PDAs, tablets, pagers, routers, switches, and the like. The disclosure may also be practiced in distributed system environments where local and remote computer systems, which are linked (either by hardwired data links, wireless data links, or by a combination of hardwired and wireless data links) through a network, both perform tasks. In a distributed system environment, program modules may be located in both local and remote memory storage devices.
[0118] Embodiments of the present disclosure can also be implemented in cloud computing environments. In this description, cloud computing is defined as a model for enabling on-demand network access to a shared pool of configurable computing resources. For example, cloud computing can be employed in the marketplace to offer ubiquitous and convenient on-demand access to the shared pool of configurable computing resources. The shared pool of configurable computing resources can be rapidly provisioned via virtualization and released with low management effort or service provider interaction and scaled accordingly.
[0119] A cloud-computing model can be composed of various characteristics such as, for example, on-demand self-service, broad network access, resource pooling, rapid elasticity, measured service, and so forth. A cloud-computing model can also expose various service models, such as, for example, Software as a Service (SaaS), Platform as a Service (PaaS), and Infrastructure as a Service (IaaS). A cloud-computing model can also be deployed using different deployment models such as private cloud, community cloud, public cloud, hybrid cloud, and so forth. In this description and in the claims, a cloud-computing environment is an environment in which cloud computing is employed.
[0120]
[0121] In one or more embodiments, the processor 1102 includes hardware for executing instructions, such as those making up a computer program. As an example, and not by way of limitation, to execute instructions for dynamically modifying workflows, the processor 1102 may retrieve (or fetch) the instructions from an internal register, an internal cache, the memory 1104, or the storage device 1106 and decode and execute them. The memory 1104 may be a volatile or non-volatile memory used for storing data, metadata, and programs for execution by the processor(s). The storage device 1106 includes storage, such as a hard disk, flash disk drive, or other digital storage device, for storing data or instructions for performing the methods described herein.
[0122] The I/O interface 1108 allows a user to provide input to, receive output from, and otherwise transfer data to and receive data from computing device 1100. The I/O interface 1108 may include a mouse, a keypad or a keyboard, a touch screen, a camera, an optical scanner, network interface, modem, other known I/O devices or a combination of such I/O interfaces. The I/O interface 1108 may include one or more devices for presenting output to a user, including, but not limited to, a graphics engine, a display (e.g., a display screen), one or more output drivers (e.g., display drivers), one or more audio speakers, and one or more audio drivers. In certain embodiments, the I/O interface 1108 is configured to provide graphical data to a display for presentation to a user. The graphical data may be representative of one or more graphical user interfaces and/or any other graphical content as may serve a particular implementation.
[0123] The communication interface 1110 can include hardware, software, or both. In any event, the communication interface 1110 can provide one or more interfaces for communication (such as, for example, packet-based communication) between the computing device 1100 and one or more other computing devices or networks. As an example, and not by way of limitation, the communication interface 1110 may include a network interface controller (NIC) or network adapter for communicating with an Ethernet or other wire-based network or a wireless NIC (WNIC) or wireless adapter for communicating with a wireless network, such as a WI-FI.
[0124] Additionally, the communication interface 1110 may facilitate communications with various types of wired or wireless networks. The communication interface 1110 may also facilitate communications using various communication protocols. The communication infrastructure 1112 may also include hardware, software, or both that couples components of the computing device 1100 to each other. For example, the communication interface 1110 may use one or more networks and/or protocols to enable a plurality of computing devices connected by a particular infrastructure to communicate with each other to perform one or more aspects of the processes described herein. To illustrate, the digital content campaign management process can allow a plurality of devices (e.g., a client device and server devices) to exchange information using various communication networks and protocols for sharing information such as electronic messages, user interaction information, engagement metrics, or campaign management resources.
[0125] In the foregoing specification, the present disclosure has been described with reference to specific exemplary embodiments thereof. Various embodiments and aspects of the present disclosure(s) are described with reference to details discussed herein, and the accompanying drawings illustrate the various embodiments. The description above and drawings are illustrative of the disclosure and are not to be construed as limiting the disclosure. Numerous specific details are described to provide a thorough understanding of various embodiments of the present disclosure.
[0126] The present disclosure may be embodied in other specific forms without departing from its spirit or essential characteristics. The described embodiments are to be considered in all respects only as illustrative and not restrictive. For example, the methods described herein may be performed with less or more steps/acts or the steps/acts may be performed in differing orders. Additionally, the steps/acts described herein may be repeated or performed in parallel with one another or in parallel with different instances of the same or similar steps/acts. The scope of the present application is, therefore, indicated by the appended claims rather than by the foregoing description. All changes that come within the meaning and range of equivalency of the claims are to be embraced within their scope.