public void TestSprite() { ImageUploadParams uploadParams = new ImageUploadParams() { File = new FileDescription(m_testImagePath), Tags = "logo,beauty", PublicId = "logo1", Transformation = new Transformation().Width(200).Height(100) }; m_cloudinary.Upload(uploadParams); uploadParams.PublicId = "logo2"; uploadParams.Transformation = new Transformation().Width(100).Height(100); m_cloudinary.Upload(uploadParams); uploadParams.PublicId = "logo3"; uploadParams.Transformation = new Transformation().Width(100).Height(300); m_cloudinary.Upload(uploadParams); SpriteParams sprite = new SpriteParams("logo"); SpriteResult result = m_cloudinary.MakeSprite(sprite); Assert.NotNull(result); Assert.NotNull(result.ImageInfos); Assert.AreEqual(3, result.ImageInfos.Count); Assert.Contains("logo1", result.ImageInfos.Keys); Assert.Contains("logo2", result.ImageInfos.Keys); Assert.Contains("logo3", result.ImageInfos.Keys); }
public async Task <SpriteResult> MakeSpriteAsync(SpriteParams parameters) { using (var response = await Api.CallAsync(HttpMethod.Post, Api.ApiUrlImgUpV.Action("sprite").BuildUrl(), parameters.ToParamsDictionary(), null, null)) { return(await SpriteResult.Parse(response)); } }
public void TestDownloadSprite() { const string spriteTestTag = "sprite_test_tag"; const string url1 = "https://res.cloudinary.com/demo/image/upload/sample"; const string url2 = "https://res.cloudinary.com/demo/image/upload/car"; var paramsFromTag = new SpriteParams(spriteTestTag); var urlFromTag = m_cloudinary.DownloadSprite(paramsFromTag); var paramsFromUrl = new SpriteParams(new List <string> { url1, url2 }); var urlFromUrls = m_cloudinary.DownloadSprite(paramsFromUrl); var expectedUrl = "https://api.cloudinary.com/v1_1/" + m_cloudinary.Api.Account.Cloud + "/image/sprite"; var uriFromTag = new Uri(urlFromTag); var uriFromUrls = new Uri(urlFromUrls); Assert.True(uriFromTag.ToString().StartsWith(expectedUrl)); Assert.True(uriFromUrls.ToString().StartsWith(expectedUrl)); var uriParamsFromTag = HttpUtility.ParseQueryString(uriFromTag.Query); Assert.AreEqual("download", uriParamsFromTag["mode"]); Assert.AreEqual(spriteTestTag, uriParamsFromTag["tag"]); Assert.NotNull(uriParamsFromTag["timestamp"]); Assert.NotNull(uriParamsFromTag["signature"]); var uriParamsFromUrls = HttpUtility.ParseQueryString(uriFromUrls.Query); Assert.AreEqual("download", uriParamsFromUrls["mode"]); Assert.True(uriParamsFromUrls["urls[]"].Contains(url1)); Assert.True(uriParamsFromUrls["urls[]"].Contains(url2)); Assert.NotNull(uriParamsFromUrls["timestamp"]); Assert.NotNull(uriParamsFromUrls["signature"]); }
public void TestSprite() { var spriteTag = GetMethodTag(); var testTransformations = new[] { m_resizeTransformation, m_updateTransformation, m_simpleTransformation }; var uploadResults = testTransformations.Select(t => UploadTestImageResource((uploadParams) => { uploadParams.Tags = $"{spriteTag},{m_apiTag}"; uploadParams.Transformation = t; }, StorageType.sprite) ).ToList(); var addedPublicIds = uploadResults.Select(uploadResult => uploadResult.PublicId).ToList(); var spriteParams = new SpriteParams(spriteTag) { Format = FILE_FORMAT_JPG }; var result = m_cloudinary.MakeSprite(spriteParams); AddCreatedPublicId(StorageType.sprite, result.PublicId); AssertSprite(result, FILE_FORMAT_JPG); CollectionAssert.AreEqual(addedPublicIds, result.ImageInfos.Keys); var urls = uploadResults.Select(uploadResult => uploadResult.Url.ToString()).ToList(); spriteParams = new SpriteParams(urls) { Format = FILE_FORMAT_JPG }; result = m_cloudinary.MakeSprite(spriteParams); AddCreatedPublicId(StorageType.sprite, result.PublicId); AssertSprite(result, FILE_FORMAT_JPG); Assert.AreEqual(addedPublicIds.Count, result.ImageInfos.Keys.Count); }
void Reset() { spriteParams = null; serializedObject = null; frameToEdit = -1; paramsRL = null; }
/// <summary> /// Eagerly generate sprites /// </summary> /// <param name="parameters">Parameters for sprite generation</param> /// <returns>Result of sprite generation</returns> public SpriteResult MakeSprite(SpriteParams parameters) { UrlBuilder urlBuilder = new UrlBuilder( m_api.ApiUrlImgUpV. Action("sprite"). BuildUrl()); using (HttpWebResponse response = m_api.Call( HttpMethod.POST, urlBuilder.ToString(), parameters.ToParamsDictionary(), null)) { SpriteResult result = SpriteResult.Parse(response); return(result); } }
public void TestSprite() { var publicId1 = GetUniquePublicId(StorageType.sprite); var publicId2 = GetUniquePublicId(StorageType.sprite); var publicId3 = GetUniquePublicId(StorageType.sprite); var spriteTag = GetMethodTag(); ImageUploadParams uploadParams = new ImageUploadParams() { File = new FileDescription(m_testImagePath), Tags = $"{spriteTag},{m_apiTag}", PublicId = publicId1, Transformation = m_resizeTransformation }; m_cloudinary.Upload(uploadParams); uploadParams.PublicId = publicId2; uploadParams.Transformation = m_updateTransformation; m_cloudinary.Upload(uploadParams); uploadParams.PublicId = publicId3; uploadParams.Transformation = m_simpleTransformation; m_cloudinary.Upload(uploadParams); SpriteParams sprite = new SpriteParams(spriteTag) { Format = FILE_FORMAT_JPG }; SpriteResult result = m_cloudinary.MakeSprite(sprite); AddCreatedPublicId(StorageType.sprite, result.PublicId); Assert.NotNull(result); Assert.NotNull(result.ImageInfos); Assert.AreEqual(3, result.ImageInfos.Count); StringAssert.EndsWith(FILE_FORMAT_JPG, result.ImageUri.ToString()); Assert.Contains(publicId1, result.ImageInfos.Keys); Assert.Contains(publicId2, result.ImageInfos.Keys); Assert.Contains(publicId3, result.ImageInfos.Keys); }
public void TestSpriteTransformation() { var publicId1 = GetUniquePublicId(StorageType.sprite); var publicId2 = GetUniquePublicId(StorageType.sprite); var publicId3 = GetUniquePublicId(StorageType.sprite); var spriteTag = GetMethodTag(); ImageUploadParams uploadParams = new ImageUploadParams() { File = new FileDescription(m_testImagePath), Tags = $"{spriteTag},{m_apiTag}", PublicId = publicId1, Transformation = m_simpleTransformation }; m_cloudinary.Upload(uploadParams); uploadParams.PublicId = publicId2; uploadParams.Transformation = m_updateTransformation; m_cloudinary.Upload(uploadParams); uploadParams.PublicId = publicId3; uploadParams.Transformation = m_explicitTransformation; m_cloudinary.Upload(uploadParams); SpriteParams sprite = new SpriteParams(spriteTag) { Transformation = m_resizeTransformation }; SpriteResult result = m_cloudinary.MakeSprite(sprite); AddCreatedPublicId(StorageType.sprite, result.PublicId); Assert.NotNull(result); Assert.NotNull(result.ImageInfos); foreach (var item in result.ImageInfos) { Assert.AreEqual(m_resizeTransformationWidth, item.Value.Width); Assert.AreEqual(m_resizeTransformationHeight, item.Value.Height); } }
// Vector2 GetAnchorPos(SerializedProperty spriteAnchorProp, Sprite sprite) { // Vector2 position = spriteAnchorProp.FindPropertyRelative("anchor.position").vector3Value // * sprite.pixelsPerUnit; // position.y = -position.y; // Vector2 pivot = new Vector2(sprite.pivot.x, sprite.rect.height - sprite.pivot.y); // Vector2 handlePos = GetSpritePos(sprite) + (pivot + position) * GetSpriteScale(sprite); // return handlePos; // } // void DrawAnchor(SerializedProperty spriteAnchorProp, Sprite sprite, Vector2 pos) { // Vector2 handlePos = GetAnchorPos(spriteAnchorProp, sprite); // int controlId = GUIUtility.GetControlID("Slider1D".GetHashCode(), FocusType.Keyboard); // GUIStyle handle = new GUIStyle("U2D.pivotDot"); // if (handlePos.x < handle.fixedWidth / 2 || handlePos.x > spriteThumbnailSize.x - handle.fixedWidth / 2 // || handlePos.y < handle.fixedHeight / 2 || handlePos.y > spriteThumbnailSize.x - handle.fixedHeight / 2) // return; // handlePos += pos; // Rect handleRect = new Rect(handlePos.x - handle.fixedWidth / 2, handlePos.y - handle.fixedHeight / 2, // handle.fixedWidth, handle.fixedHeight); // if (Event.current.type == EventType.Repaint) // handle.Draw(handleRect, GUIContent.none, controlId); // } // void CopyAnchor(SerializedProperty spriteAnchorProp) { // string s = string.Format("__ClingyAnchor|{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}", // spriteAnchorProp.FindPropertyRelative("anchor.position").vector3Value.x, // spriteAnchorProp.FindPropertyRelative("anchor.position").vector3Value.y, // spriteAnchorProp.FindPropertyRelative("anchor.position").vector3Value.z, // spriteAnchorProp.FindPropertyRelative("anchor.rotation").quaternionValue.x, // spriteAnchorProp.FindPropertyRelative("anchor.rotation").quaternionValue.y, // spriteAnchorProp.FindPropertyRelative("anchor.rotation").quaternionValue.z, // spriteAnchorProp.FindPropertyRelative("anchor.rotation").quaternionValue.w, // spriteAnchorProp.FindPropertyRelative("anchor.sortingOffset").intValue, // spriteAnchorProp.FindPropertyRelative("anchor.flipX").boolValue, // spriteAnchorProp.FindPropertyRelative("anchor.flipY").boolValue); // EditorGUIUtility.systemCopyBuffer = s; // } // void PasteAnchor(SerializedProperty spriteAnchorProp) { // if (!EditorGUIUtility.systemCopyBuffer.StartsWith("__ClingyAnchor")) // return; // string[] parts = EditorGUIUtility.systemCopyBuffer.Split('|'); // if (parts.Length != 11) // return; // Vector3 v = new Vector3(float.Parse(parts[1]), float.Parse(parts[2]), float.Parse(parts[3])); // spriteAnchorProp.FindPropertyRelative("anchor.position").vector3Value = v; // Quaternion q = new Quaternion(float.Parse(parts[4]), float.Parse(parts[5]), float.Parse(parts[6]), // float.Parse(parts[7])); // spriteAnchorProp.FindPropertyRelative("anchor.rotation").quaternionValue = q; // spriteAnchorProp.FindPropertyRelative("anchor.sortingOffset").intValue = int.Parse(parts[8]); // spriteAnchorProp.FindPropertyRelative("anchor.flipX").boolValue = bool.Parse(parts[9]); // spriteAnchorProp.FindPropertyRelative("anchor.flipY").boolValue = bool.Parse(parts[10]); // } void OnEnable() { framesRL = new ReorderableList(serializedObject, serializedObject.FindProperty("frames"), true, true, false, true); framesRL.drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "Sprites"); }; framesRL.elementHeightCallback = (int index) => { if (serializedObject.FindProperty("frames").arraySize == 0) { return(0); } return(60); }; framesRL.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { Vector2 thumbSize = new Vector2(rect.height - 15, rect.height - 15); SpriteParams spriteParams = (SpriteParams)target; SpriteParams.SpriteFrame frame = spriteParams.GetFrame(index); DrawSpriteAndPreview(frame, (Sprite)serializedObject.FindProperty("previewSprite").objectReferenceValue, ClingyEditorUtils.GetSpriteAspectSize(frame.sprite, thumbSize), rect.position); // DrawAnchor(framesProp, sprite, rect.position); float btnWidth = (rect.width) / 3f - thumbSize.x + 20; if (GUI.Button(new Rect(rect.x + 60, rect.y + rect.height / 2 - 11, btnWidth, 20), "Edit")) { serializedObject.FindProperty("frameToEdit").intValue = index; ShowEditor(); } // if (GUI.Button(new Rect(rect.x + 60 + btnWidth + 5, rect.y + rect.height / 2 - 11, btnWidth, 20), // "Copy")) { // // CopyAnchor(framesProp); // } // if (GUI.Button(new Rect(rect.x + 60 + btnWidth * 2 + 10, rect.y + rect.height / 2 - 11, btnWidth, 20), // "Paste")) { // // PasteAnchor(framesProp); // } }; }
public void TestSpriteTransformation() { ImageUploadParams uploadParams = new ImageUploadParams() { File = new FileDescription(m_testImagePath), Tags = "logotrans", PublicId = "logotrans1", Transformation = new Transformation().Width(200).Height(100) }; m_cloudinary.Upload(uploadParams); uploadParams.PublicId = "logotrans2"; uploadParams.Transformation = new Transformation().Width(100).Height(100); m_cloudinary.Upload(uploadParams); uploadParams.PublicId = "logotrans3"; uploadParams.Transformation = new Transformation().Width(100).Height(300); m_cloudinary.Upload(uploadParams); SpriteParams sprite = new SpriteParams("logotrans"); sprite.Transformation = new Transformation().Width(100).Height(100).Crop("scale"); SpriteResult result = m_cloudinary.MakeSprite(sprite); Assert.NotNull(result); Assert.NotNull(result.ImageInfos); foreach (var item in result.ImageInfos) { Assert.AreEqual(100, item.Value.Width); Assert.AreEqual(100, item.Value.Height); } }
/// <summary> /// Eagerly generate sprites /// </summary> /// <param name="parameters">Parameters for sprite generation</param> /// <returns>Result of sprite generation</returns> public Task <SpriteResult> MakeSpriteAsync(SpriteParams parameters) { return(CallAsync(MakeSprite, parameters)); }
public static SpriteResult MakeSprite(this Cloudinary cloudinary, SpriteParams parameters) { return(cloudinary.MakeSpriteAsync(parameters).ExecSync()); }
void OnGUI() { if (!Selection.activeObject || !(Selection.activeObject is SpriteParams)) { Reset(); GUILayout.Label("No Clingy Sprite Params selected"); return; } SpriteParams _spriteParams = (SpriteParams)Selection.activeObject; if (spriteParams != _spriteParams || serializedObject == null) { Reset(); spriteParams = _spriteParams; serializedObject = new SerializedObject(spriteParams); } viewSize = new Vector2(position.width, position.height) * 1.5f; serializedObject.Update(); SerializedProperty framesProp = serializedObject.FindProperty("frames"); if (framesProp.arraySize == 0) { paramsRL = null; frameToEdit = -1; GUILayout.Label("Add some sprites in the inspector to get started!"); return; } int _frameToEdit = serializedObject.FindProperty("frameToEdit").intValue; if (_frameToEdit >= framesProp.arraySize) { _frameToEdit = 0; } SerializedProperty frameProp = framesProp.GetArrayElementAtIndex(_frameToEdit); if (_frameToEdit != frameToEdit || paramsRL == null) { paramsRL = ParamListEditor.CreateReorderableList(serializedObject, frameProp.FindPropertyRelative("paramList._params"), "Params"); } frameToEdit = _frameToEdit; SerializedProperty spriteProp = frameProp.FindPropertyRelative("sprite"); Sprite sprite = (Sprite)spriteProp.objectReferenceValue; if (!sprite) { return; } GUI.Box(new Rect(0, 0, position.width - 14, position.height - 14), "", new GUIStyle("preBackground")); scrollPos = GUI.BeginScrollView(new Rect(0, 0, position.width, position.height), scrollPos, new Rect(0, 0, viewSize.x, viewSize.y), true, true); SpriteParams.SpriteFrame frame = spriteParams.GetFrame(frameToEdit); SpriteParamsEditor.DrawSpriteAndPreview(frame, (Sprite)serializedObject.FindProperty("previewSprite").objectReferenceValue, GetSpriteAspectSize(frame.sprite), GetSpritePos(frame.sprite), clip: false); DoHandle(frame); GUI.EndScrollView(); DrawParamsWindow(); serializedObject.ApplyModifiedProperties(); }
public override void OnInspectorGUI() { serializedObject.Update(); SpriteParams spriteParams = (SpriteParams)target; Event evt = Event.current; Rect drop_area = GUILayoutUtility.GetRect(0.0f, 50.0f, GUILayout.ExpandWidth(true)); var style = new GUIStyle("box"); if (EditorGUIUtility.isProSkin) { style.normal.textColor = Color.white; } // thanks to ProCamera2D for the idea - Unity does not provide any simple way to select multiple assets // and add them to a reorderable list, but drag/drop works well GUI.Box(drop_area, "\nAdd sprites by dragging them here!", style); switch (evt.type) { case EventType.DragUpdated: case EventType.DragPerform: if (!drop_area.Contains(evt.mousePosition)) { break; } DragAndDrop.visualMode = DragAndDropVisualMode.Copy; if (evt.type == EventType.DragPerform) { DragAndDrop.AcceptDrag(); foreach (Object obj in DragAndDrop.objectReferences) { Sprite[] sprites = new Sprite[0]; if (obj is Texture2D) { Texture2D tex = (Texture2D)obj; string spriteSheet = AssetDatabase.GetAssetPath(tex); sprites = AssetDatabase.LoadAllAssetsAtPath(spriteSheet).OfType <Sprite>().ToArray(); } else if (obj is Sprite) { sprites = new Sprite[] { obj as Sprite }; } else if (obj is GameObject) { GameObject go = (GameObject)obj; SpriteRenderer sr = go.GetComponent <SpriteRenderer>(); if (sr && sr.sprite) { sprites = new Sprite[] { sr.sprite } } ; } foreach (Sprite s in sprites) { spriteParams.AddFrame(s); } } } break; } EditorGUILayout.Space(); framesRL.DoLayoutList(); serializedObject.ApplyModifiedProperties(); } }