Skip to content

Commit 628a6c6

Browse files
davidmotsonDavid Motsonashvili
andauthored
Added dilation parameter to generateMaskAndPadForOutpainting (#7260)
The dilation parameter gets passed through to the mask, and is optional. Ended up doing manual overloading to preserve binary compatibility. --------- Co-authored-by: David Motsonashvili <[email protected]>
1 parent e296249 commit 628a6c6

File tree

4 files changed

+29
-2
lines changed

4 files changed

+29
-2
lines changed

firebase-ai/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Unreleased
22
* [changed] Added better description for requests which fail due to the Gemini API not being
33
configured.
4+
* [changed] Added a `dilation` parameter to `ImagenMaskReference.generateMaskAndPadForOutpainting`
5+
(#7260)
46

57
# 17.1.0
68
=======

firebase-ai/api.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -698,12 +698,14 @@ package com.google.firebase.ai.type {
698698
@com.google.firebase.ai.type.PublicPreviewAPI public abstract class ImagenMaskReference extends com.google.firebase.ai.type.ImagenReferenceImage {
699699
method public static final java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions);
700700
method public static final java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions, com.google.firebase.ai.type.ImagenImagePlacement newPosition = com.google.firebase.ai.type.ImagenImagePlacement.CENTER);
701+
method public static final java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions, com.google.firebase.ai.type.ImagenImagePlacement newPosition = com.google.firebase.ai.type.ImagenImagePlacement.CENTER, double dilation = 0.01);
701702
field public static final com.google.firebase.ai.type.ImagenMaskReference.Companion Companion;
702703
}
703704

704705
public static final class ImagenMaskReference.Companion {
705706
method public java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions);
706707
method public java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions, com.google.firebase.ai.type.ImagenImagePlacement newPosition = com.google.firebase.ai.type.ImagenImagePlacement.CENTER);
708+
method public java.util.List<com.google.firebase.ai.type.ImagenReferenceImage> generateMaskAndPadForOutpainting(com.google.firebase.ai.type.ImagenInlineImage image, com.google.firebase.ai.type.Dimensions newDimensions, com.google.firebase.ai.type.ImagenImagePlacement newPosition = com.google.firebase.ai.type.ImagenImagePlacement.CENTER, double dilation = 0.01);
707709
}
708710

709711
@com.google.firebase.ai.type.PublicPreviewAPI public final class ImagenPersonFilterLevel {

firebase-ai/gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
version=17.1.1
15+
version=17.2.0
1616
latestReleasedVersion=17.1.0

firebase-ai/src/main/kotlin/com/google/firebase/ai/type/ImagenReferenceImage.kt

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,29 @@ internal constructor(maskConfig: ImagenMaskConfig, image: ImagenInlineImage? = n
131131
image: ImagenInlineImage,
132132
newDimensions: Dimensions,
133133
newPosition: ImagenImagePlacement = ImagenImagePlacement.CENTER,
134+
): List<ImagenReferenceImage> =
135+
generateMaskAndPadForOutpainting(image, newDimensions, newPosition, 0.01)
136+
137+
/**
138+
* Generates two reference images of [ImagenRawImage] and [ImagenRawMask]. These images are
139+
* generated in this order:
140+
* * One [ImagenRawImage] containing the original image, padded out to the new dimensions with
141+
* black pixels, with the original image placed at the given placement
142+
* * One [ImagenRawMask] of the same dimensions containing white everywhere except at the
143+
* placement original image. This is the format expected by Imagen for outpainting requests.
144+
*
145+
* @param image the original image
146+
* @param newDimensions the new dimensions for outpainting. These new dimensions *must* be more
147+
* than the original image.
148+
* @param newPosition the placement of the original image within the new outpainted image.
149+
* @param dilation the dilation for the outpainting mask. See: [ImagenRawMask].
150+
*/
151+
@JvmStatic
152+
public fun generateMaskAndPadForOutpainting(
153+
image: ImagenInlineImage,
154+
newDimensions: Dimensions,
155+
newPosition: ImagenImagePlacement = ImagenImagePlacement.CENTER,
156+
dilation: Double = 0.01
134157
): List<ImagenReferenceImage> {
135158
val originalBitmap = image.asBitmap()
136159
if (
@@ -180,7 +203,7 @@ internal constructor(maskConfig: ImagenMaskConfig, image: ImagenInlineImage? = n
180203
newImageCanvas.drawBitmap(originalBitmap, null, normalizedImageRectangle, null)
181204
return listOf(
182205
ImagenRawImage(newImageBitmap.toImagenInlineImage()),
183-
ImagenRawMask(maskBitmap.toImagenInlineImage()),
206+
ImagenRawMask(maskBitmap.toImagenInlineImage(), dilation),
184207
)
185208
}
186209
}

0 commit comments

Comments
 (0)